为什么这个代码会创建两个对象而需要一个?

时间:2013-11-27 18:29:38

标签: c++ qt

这是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在堆上创建另一个对象并分配给成员?

1 个答案:

答案 0 :(得分:3)

堆栈中的那个是Notepad类型,它是应用程序的主窗口。动态类型为Ui::Notepad。这是由Qt的uic工具自动生成的类;它包含在UI创建者中创建的小部件作为数据成员。

在某种程度上,您可以说Notepad关注逻辑并使用{​​{1}}的实例为其提供GUI。