C++ 类指针之间的差异

C++ 类指针之间的差异,c++,qt,C++,Qt,我刚刚开始学习Qt,有些事情我不明白。 因此,我通过creator制作了widget应用程序,框架为其创建了头文件和cpp文件 主窗口 头文件 我的问题是,构造函数生成的ui所指向的对象与同一构造函数中使用的this所指向的对象有什么区别。另外,为什么我不能通过ui指针来访问主窗口成员?当你在Qt中创建一个小部件时,有一些神奇之处(如果一切都设置得很好,这在使用模板时也是如此)。Qt将从您编辑的.ui文件生成ui类。该类包含您使用设计器添加的所有小部件。() > 指针是C++基本概念,是你正在

我刚刚开始学习Qt,有些事情我不明白。 因此,我通过creator制作了widget应用程序,框架为其创建了头文件和cpp文件 主窗口

头文件


我的问题是,构造函数生成的
ui
所指向的对象与同一构造函数中使用的
this
所指向的对象有什么区别。另外,为什么我不能通过
ui
指针来访问主窗口成员?

当你在Qt中创建一个小部件时,有一些神奇之处(如果一切都设置得很好,这在使用模板时也是如此)。Qt将从您编辑的.ui文件生成
ui
类。该类包含您使用设计器添加的所有小部件。()

<> > <代码>指针是C++基本概念,是你正在工作的类。例如,您实际上可以编写'this->ui->setupUi(this)'


如果您无法访问通过
ui
创建的小部件,这可能意味着您必须首先进行编译,以便Qt能够发挥其神奇的作用。如果你已经这么做了,这可能意味着有些东西是假的,我非常怀疑,当你在Qt中创建一个小部件时,会有一些魔力(如果一切都设置得很好,使用模板时就会出现这种情况)。Qt将从您编辑的.ui文件生成
ui
类。该类包含您使用设计器添加的所有小部件。()

<> > <代码>指针是C++基本概念,是你正在工作的类。例如,您实际上可以编写'this->ui->setupUi(this)'


如果您无法访问通过
ui
创建的小部件,这可能意味着您必须首先进行编译,以便Qt能够发挥其神奇的作用。如果您已经这样做了,这可能意味着有些东西是假的,我非常怀疑您的成员“ui”的类型是ui::MainWindow-它是一个类,是从您的表单生成的。该类由UIC生成

“this”指针-是指向当前类的指针,在您的示例中,它的类型为MainWindow

Ui::MainWindow和MainWindow不一样。如果要访问由Qt设计器创建的按钮,请使用“ui”成员,而不是“this”指针


此链接可能会帮助您

您的成员“ui”的类型为ui::MainWindow-它是一个类,由您的表单生成。该类由UIC生成

“this”指针-是指向当前类的指针,在您的示例中,它的类型为MainWindow

Ui::MainWindow和MainWindow不一样。如果要访问由Qt设计器创建的按钮,请使用“ui”成员,而不是“this”指针


此链接可能会帮助您

ui
指向
ui::MainWindow
指向
MainWindow
——它们是不同的类(相同的名称,但不同的命名空间)和不同的对象。因此,您无法通过指向另一个类对象的指针访问一个类的成员。因此
Ui::MainWindow
不是头文件中的
MainWindow
类吗?它会自动命名为这样的名称,以指示此Ui属于此类。但是它们是不同的。
ui
指向
ui::MainWindow
,而
指向
MainWindow
——它们是不同的类(相同的名称,但不同的命名空间)和不同的对象。因此,您无法通过指向另一个类对象的指针访问一个类的成员。因此
Ui::MainWindow
不是头文件中的
MainWindow
类吗?它会自动命名为这样的名称,以指示此Ui属于此类。但它们是不同的。这个答案最适合霍格沃茨。stackexchange.com.:)撇开所有的笑话不谈,请你详细说明魔法是如何发生的,因为它可能对读者很有用。这个答案最适合霍格沃茨。stackexchange.com.:)撇开所有的笑话不谈,请你详细说明魔法是如何发生的,因为它可能对读者有用。
#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
#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;
}