为什么我们要"this"指针传递给setupUi 函数?
Why do we pass "this" pointer to setupUi function?
我对QT还是个新手。从qt文档中简单解释如下:
class CalculatorForm : public QWidget
{
Q_OBJECT
public:
CalculatorForm(QWidget *parent = 0);
private slots:
void on_inputSpinBox1_valueChanged(int value); //why is that slots are private?
private:
Ui::CalculatorForm ui;
};
以及构造函数的实现
CalculatorForm::CalculatorForm(QWidget *parent)
: QWidget(parent) {
ui.setupUi(this); // <-- Question below
}
Q: 我想知道为什么我们要将this
指针传递给setupUi函数?,它做什么?
这样,对话框将以调用方为父对象,例如,当父对象关闭时,对话框可以自动关闭。一般来说,所有gui元素都有一个指向其父元素的指针。
private slots:
void on_inputSpinBox1_valueChanged(int value); //why is that slots are private?
这些是自动生成的插槽,与QtDesigner中gui元素的命名完全匹配。它们只是用来直接连接到那些gui元素,因此应该在这个类中处理。如果这些信号被扩展到其他类,那么gui中的任何更改都需要更改许多其他代码,而这些代码不需要知道gui的详细信息。
在特定gui元素的处理程序槽中,您可以向应用程序的其他部分发出另一个更通用的信号。
setupUi
唯一没有创建的小部件是ui文件中层次结构顶部的小部件,由于Ui::CalculatorForm
类实例不知道它必须填充的小部件(this
),因此必须在某个时刻显式传递给该类。
this
或您将传递给它的任何其他小部件都用作所有其他子小部件的父部件。例如,您可以填充一个没有继承的小部件,如下所示:
QWidget *widget = new QWidget;
Ui::CalculatorForm *ui = new Ui::CalculatorForm;
ui->setupUi(widget);
widget->show();
但实际上,如果您阅读uic生成的文件(可能名为ui_calculatorform.h
)的内容,会更容易理解。
setupUi创建小部件的实例(QLabel、QTextEdit等)。[用户界面编译器](http://qt-project.org/doc/qt-4.8/uic.html)从.UI表单中为您获取信息,并在生成的moc源文件中生成小部件创建代码。
在不使用Qt设计器或UI文件的情况下手动创建小部件的方式如下:
QWidget* pWidget = new QWidget(this);
我认为应该将调用者小部件添加到这个UI的布局中。这个小部件将是顶级小部件。
Martin Beckett的回答可能也是正确的,因为他所描述的是Qt中的一种常见行为(参见大多数小部件派生类构造函数中的"parent"参数)
请注意,设计器可以通过其他方式自动生成代码。在这种情况下,您有一个单独的"UI"类用于此代码,它不是QObject,因此也不是QWidget。自动生成的代码需要有关父窗口小部件的信息,并对插槽和信号进行自动连接,因此这就是必须传递this
的原因
与其他pastern相比,这个pater的侵入性较小(这就是为什么它是默认的)。您也可以尝试其他模式(检查Qt创建者设计器选项),但我建议您查看设计器工具在默认设置中生成的内容。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 为什么我们要"this"指针传递给setupUi 函数?