QT 程序默认初始化 有同名的MainWindow

自动生成的主窗体程序中(MainWindow),会有以下几个文件:

细心的人会发现在头文件中,有一个命名空间声明

 

namespace Ui {

class MainWindow;

}

它和自定义的主窗体类同名,主窗体类如下:

class MainWindow : public QMainWindow

{

...

private:

    Ui::MainWindow *ui;//此处的MainWindow已经指明了是上面Ui中定义的类。这里只是同名。

 

}

 

但是他们两个是全部不同的东西,但是有点特殊的联系。鼠标右键转入第一个MainWindow的类实现函数中,如下所示:

 

namespace Ui {

    class MainWindow: public Ui_MainWindow {};

} // namespace Ui

 

这段代码在#include "ui_mainwindow.h"头文件中。Ui_MainWindow类的定义也在此文件中,它有个成员函数setupUi会被继承给MainWindow。setupUi函数就是初始化的关键所在。它有个参数,在函数内会对传入的参数进行处理。如下所示,它对传入的窗体类进行大小、工具栏,菜单栏的初始化设置。

 void setupUi(QMainWindow *MainWindow)

    {

        if (MainWindow->objectName().isEmpty())

            MainWindow->setObjectName(QStringLiteral("MainWindow"));

        MainWindow->resize(400, 300);

        menuBar = new QMenuBar(MainWindow);

        menuBar->setObjectName(QStringLiteral("menuBar"));

        MainWindow->setMenuBar(menuBar);

        mainToolBar = new QToolBar(MainWindow);

        mainToolBar->setObjectName(QStringLiteral("mainToolBar"));

...

回到我们自定义的类class MainWindow : public QMainWindow。系统给它自动生成的构造函数中,先新建了一个UI的MainWindow并通过setupUi对传入的主窗体对象进行初始化。如下所示:

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)//新建一个,初始化该成员对象

{

    ui->setupUi(this);//在setupUi函数中,对传入的自定义主窗体类进行初始化

}

最后在析构函数中对新建的UI的MainWindow类型对象ui释放内存。

MainWindow::~MainWindow()

{

    delete ui;

}

 

猜你喜欢

转载自blog.csdn.net/sme000/article/details/91047175