类指针之间的Qt差异

时间:2018-09-26 09:09:59

标签: c++ qt

我刚刚开始学习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成员?

2 个答案:

答案 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发挥作用。如果您已经做过,那可能意味着某件事变得虚假了,我对此表示高度怀疑