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