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;

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值