MainWindow 是否在 qt5 中自行初始化?
Is MainWindow initialized with itself in qt5?
我尝试学习 qt 5,但一件事都不明白。
Qt creator默认制作这两个文件:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow) // <!-- what does it do?
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
我不明白:ui(new Ui::MainWindow)
在构造函数中?我知道它会初始化 ui 指针,但是指向什么?对自己?所以基本上,这是否意味着 MainWindow
是用自身初始化的,或者可能引用了 MainWindow
的其他实例?如果是这样,它是某种 C++ 编程模式或方法吗?它有名字吗,所以我可以自己阅读。
非常感谢您的解释。
不是 MainWindow
,是 Ui::MainWindow
- 不一样 class。 Ui
命名空间中的 类 是由 qmake(和朋友)自动生成的 classes。此 class 包含初始化并允许您访问表单上的小部件的代码 - 您在图形 Qt 设计器中创建的小部件。
此 class 包含在您的 cpp 文件第二行的文件中:
#include "ui_mainwindow.h"
我尝试学习 qt 5,但一件事都不明白。 Qt creator默认制作这两个文件:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow) // <!-- what does it do?
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
我不明白:ui(new Ui::MainWindow)
在构造函数中?我知道它会初始化 ui 指针,但是指向什么?对自己?所以基本上,这是否意味着 MainWindow
是用自身初始化的,或者可能引用了 MainWindow
的其他实例?如果是这样,它是某种 C++ 编程模式或方法吗?它有名字吗,所以我可以自己阅读。
非常感谢您的解释。
不是 MainWindow
,是 Ui::MainWindow
- 不一样 class。 Ui
命名空间中的 类 是由 qmake(和朋友)自动生成的 classes。此 class 包含初始化并允许您访问表单上的小部件的代码 - 您在图形 Qt 设计器中创建的小部件。
此 class 包含在您的 cpp 文件第二行的文件中:
#include "ui_mainwindow.h"