这是Qt的教程代码:
标题文件:
#include <QMainWindow>
namespace Ui {
class Notepad;
}
class Notepad : public QMainWindow
{
Q_OBJECT
public:
explicit Notepad(QWidget *parent = 0);
~Notepad();
private:
Ui::Notepad *ui;
};
源文件:
#include "notepad.h"
#include "ui_notepad.h"
Notepad::Notepad(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Notepad)
{
ui->setupUi(this);
}
Notepad::~Notepad()
{
delete ui;
}
主要是
#include "notepad.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Notepad w;
w.show();
return a.exec();
}
因此,当我们执行Notepad w
时,已经在堆栈上创建了一个对象,为什么代码仍然使用new在堆上创建另一个对象并分配给成员?
答案 0 :(得分:3)
堆栈中的那个是Notepad
类型,它是应用程序的主窗口。动态类型为Ui::Notepad
。这是由Qt的uic
工具自动生成的类;它包含在UI创建者中创建的小部件作为数据成员。
在某种程度上,您可以说Notepad
关注逻辑并使用{{1}}的实例为其提供GUI。