Qt:访问在构造函数之外使用 GUI 小部件的类的函数

Posted

技术标签:

【中文标题】Qt:访问在构造函数之外使用 GUI 小部件的类的函数【英文标题】:Qt: Access functions of class which is using a GUI widget outside the constructor 【发布时间】:2016-12-22 07:44:35 【问题描述】:

我有一个名为“mainWindow”的 Qt-GUI。

在构造函数中,我使用了一个名为“testclass”的类,它使用来自 GUI 的小部件。

mainWindow::mainWindow(QWidget *parent): QMainWindow(parent)

testclass window_test(ui.Widget);
window_test.function();

现在我想在构造函数之外访问“window_test”的函数。

我尝试添加

testclass window_test(ui.Widget);

作为 mainWindow 类的类成员,但我无法访问那里的 ui.Widget。

处理这种情况的最佳方法是什么?

【问题讨论】:

【参考方案1】:

您是否在 mainWindow 的头文件中声明了函数的原型?这可能只是范围问题。

【讨论】:

我有“mainWindow”类和“testclass”的 .h/.cpp 文件。我在“mainWindow”构造函数中生成了一个“testclass”实例。但是现在我只能在构造函数中访问“testclass”的函数,但我也想在按钮回调函数等中访问它们。 在您的 mainWindow.h 的私有下添加该实例,这应该使其在您的 mainWindow.cpp 中可用。【参考方案2】:

我将“testclass”的实例添加到 mainWindow.h,但我必须为其使用标准构造函数。因此,我声明了一个新函数来将小部件传递给类。

【讨论】:

【参考方案3】:

如果你必须将参数传递给你的成员变量window_test的构造函数,你可以这样做:

mainWindow::mainWindow(QWidget *parent) : QMainWindow(parent),
  window_test(ui.Widget)


成员变量的声明很简单

class mainWindow 
  ...
  testwindow window_test;
;

如果ui 本身是mainWindow 的成员变量,它有一个构造函数,那么声明的顺序可能很重要。 ui 应该在 window_test 之前声明,所以它在使用时已经被构造了。

【讨论】:

以上是关于Qt:访问在构造函数之外使用 GUI 小部件的类的函数的主要内容,如果未能解决你的问题,请参考以下文章

你将如何从 Qt 中另一个文件中的函数访问小部件?

QT - 在不阻止他的 GUI 的情况下显示小部件

类构造函数中指向 QProcess 对象的指针使 qt GUI 崩溃

使用 Qt GUI 编写 c++ dll,在自定义小部件中显示失败

Qt - 如何覆盖小部件?

如何在 Qt-Designer 中使用自定义小部件