文章目录

  • 一、问题描述
  • 二、问题分析
    • 1.mainwindow.h
    • 2.ui_mainwindow.h
    • 3.mainwindow.cpp

一、问题描述

QT生成一个简单的MainWindow工程后,mainwindows.cpp中,实现了MainWindow的构造函数,见如下代码。

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)

冒号后面的两行代码,是C++的列表初始化。其中QMainWindow(parent) 是显式调用基类的构造函数, ui(new Ui::MainWindow) 是初始化ui指针。ui指针在mainwindow.h中定义的。

当初看到ui(new Ui::MainWindow) ,我的问题来了,MainWindow的构造函数,会 new 一个MainWindow,不是又会调用一下MainWindow的构造函数吗?这岂不是套娃?会死循环的。但实际运行正常,肯定是自己的理解错了。

结论:
QT将两个不同的类都命名成了MainWindow,通过namespace进行了区分。
Ui命名空间的变量名,和默认空间的变量名,虽然一样,但实际是两个东西。

二、问题分析

1.mainwindow.h

见代码的注释

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow_gui; // 将原来的MainWindow改为了MainWindow_gui。 此处在“Ui”的命名空间中,声明了一个MainWindow_gui类。
}class MainWindow : public QMainWindow // MainWindow 是基于QMainWindow 派生的类
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private:// 定义了一个指向MainWindow_gui的指针pui。MainWindow_gui是在Ui命名空间中的,所以要写成“ Ui::MainWindow_gui”Ui::MainWindow_gui * pui;
};#endif // MAINWINDOW_H

2.ui_mainwindow.h

这个文件,没有在工程目录下,应该是qt生成后放在编译目录中了。编译时会连接。
见代码的注释

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H#include <QtCore/QVariant>
// ***省略***class Ui_MainWindow // 定义了一个 Ui_MainWindow 类
{public:// ***省略***void setupUi(QMainWindow *MainWindow){// ***省略***} // setupUi
};namespace Ui {// Ui空间里,定义了一个MainWindow_gui类,该类继承自Ui_MainWindow class MainWindow_gui: public Ui_MainWindow {};
} // namespace Ui
#endif // UI_MAINWINDOW_H

3.mainwindow.cpp

这个文件,没有在工程目录下,应该是qt生成后放在编译目录中了。编译时会连接。
见代码的注释

// 手动测试了一下,两个头文件没有先后include的关系
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : // 具体实现了MainWindow的构造函数QMainWindow(parent),  // 调用基类QMainWindow的构造函数,因为MainWindow是从QMainWindow派生来的pui(new Ui::MainWindow_gui) // new一个Ui空间里的MainWindow_gui类,并将其指针初始化pui
{pui->setupUi(this);
}
MainWindow::~MainWindow()
{delete pui;
}

ui(new Ui::MainWindow) 解惑相关推荐

  1. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)的理解(即c++参数初始)

    MainWindow::MainWindow( QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {} 一直对这句话理解有误 ...

  2. 【pyqt5】——入门级模板(ui文件+ui转py文件+逻辑py文件)(消息提示框)

    目录 1.ui文件 2.ui转py文件 3.逻辑py文件 4.实例 1)ui文件--demo.ui 2)ui转py文件--demo.py 3)逻辑py文件--demoLogic.py 4)运行结果 1 ...

  3. uni-app里的拓展组件uni ui与UI框架uView UI的Popup 弹出层的区别!

    uni-app里的拓展组件uni ui与UI框架uView UI的Popup 弹出层的区别! 文章目录 1.官网Popup 弹出层链接 2.属性不同 3.属性对照 4.弹出的方式 5.uView特有属 ...

  4. 【Lyra UI】UI 玩法逻辑小结

    [Lyra UI]UI 玩法逻辑小结 UI 这块分两个部分:功能版逻辑 + 材质效果 本篇讨论逻辑,即怎么组织UI结构,代码怎么串联事件和逻辑 笔者之前并没有用UE开发过游戏,也算是从零开始,所以并不 ...

  5. js ui 前端UI框架

    http://fineui.com/ http://www.layui.com/ js ui 前端UI框架

  6. 零基础小白学习UI设计 UI的学习路线是什么

    零基础学习UI设计,担心的就是不知道要学哪些内容,郑州UI学习路线是什么呢?要怎样去学习这门课程,那么零基础的同学想快速的学习UI交互设计,那么下面给大家分享一份UI交互设计学习课程大纲给大家. UI ...

  7. 转: windows下C++ UI库 UI神器-SOUI

    转:http://www.cnblogs.com/setoutsoft/p/4996870.html 前言 在Windows平台上开发客户端产品是一个非常痛苦的过程,特别是还要用C++的时候. 尽管很 ...

  8. 移动端、PC端(前后台)、小程序常用的UI框架 - UI框架篇

    目录 1.移动端UI库 ①.Vant UI ②.Mint UI ③.Muse UI ④.Nut UI 2.PC端前.后台UI库 ①.Element UI ②.vue-element-admin ③.i ...

  9. iView UI / Element UI修改样式不成功解决办法

    项目场景:iView UI / Element UI修改样式不成功 问题描述 例如:在修改组件样式中,直接修改还是通过添加类名,修改都不成功 原因分析: 原因:,其中的scoped限制了修改 解决方案 ...

最新文章

  1. Java游戏服务器系列之Netty详解
  2. 问题.NET--win7 IIS唯一密钥属性“VALUE”设置为“DEFAULT.ASPX”时,无法添加类型为“add”的重复集合...
  3. ipad和iphone切图_如何从iPhone和iPad上的Mail应用程序删除电子邮件帐户
  4. 【LeetCode笔记】84. 柱状图中最大的矩形(字符串、单调栈)
  5. C++第9周(春)项目5 - 一元一次方程类
  6. 【冷笑话】看谁跑的快?
  7. python一切都是对象 知乎_python一切皆对象
  8. 龙芯源码编译mysql_使用源码包在龙芯2F上安装mysql
  9. iPhone13全系列参数对比
  10. 苹果手机点击input标签页面放大的解决方法
  11. 【蓝桥杯选拔赛真题13】Scratch接苹果游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
  12. mysql root有初始密码_mysql的root初始密码
  13. 关于DMZ区介绍及相关策略
  14. 阿里MNN推理框架相关介绍
  15. 投影仪问题Debug
  16. git 如何回退版本(通俗易懂,简单上手)
  17. javascript错误_JavaScript开发人员最常犯的10个错误
  18. 知识的边界----读书笔记
  19. 华为机试题71-字符串通配符
  20. python量化投资代码_手把手教你用三行python 代码做一个动量策略「量化投资系列」...

热门文章

  1. Flutter实战01 - 启动页 闪屏广告 引导页
  2. 【Hive】03-数据类型和文件格式
  3. vivo android8公测,vivo安卓9.0公测招募开启:明年年初获得推送
  4. 给定三角形三边,如何判断该三角形的形状
  5. SpringBoot配置websocket
  6. poi 删除 word文档中的图片
  7. 软考中级---系统集成项目管理
  8. 虹科Panorama软件平台—功能强大、潜力无限的SCADA解决方案
  9. 猪皮做成眼角膜为盲人恢复视力,不用等人捐献了
  10. Quantopian自学笔记03