我刚刚开始学习Qt,有些事情我不理解。 所以我通过创建者创建了窗口小部件应用程序,并为框架创建了标头和cpp文件 MainWindow。
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLayout>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
private:
Ui::MainWindow *ui;
QLayout *aLayout;
QLayout *bLayout;
};
#endif // MAINWINDOW_H
Cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->...
}
MainWindow::~MainWindow()
{
delete ui;
}
我的问题是,构造函数创建的ui
指向的对象与同一构造函数中使用的this
所指向的对象有什么区别?另外,为什么我不能通过ui
指针来访问MainWindow成员?
答案 0 :(得分:4)
您的成员'ui'的类型为Ui :: MainWindow-这是一个类,它是从您的表单生成的。该类由UIC生成。 http://doc.qt.io/Qt-5/uic.html
'this'指针-是指向当前类的指针,在您的情况下,其类型为MainWindow。
Ui :: MainWindow和MainWindow不相同。如果要访问由Qt Designer创建的按钮,请使用'ui'成员,而不是'this'指针。
此链接可能会帮助您http://doc.qt.io/Qt-5/designer-using-a-ui-file.html
答案 1 :(得分:1)
在Qt中创建窗口小部件时,会有一些魔力(如果一切设置都不错,那么使用模板时就是这种情况)。 Qt将根据您编辑的.ui文件生成ui
类。此类包含您与设计器一起添加的所有小部件。 (see the answer of Arman for more details)
this
指针是C ++的基本概念,它是您正在使用的类。您实际上可以编写例如'this-> ui-> setupUi(this)`。
如果您无法访问通过ui
创建的窗口小部件,则可能意味着您首先必须进行编译才能使Qt发挥作用。如果您已经做过,那可能意味着某件事变得虚假了,我对此表示高度怀疑