一、问题
QT生成一个简单的MainWindow工程后,mainwindows.cpp中,实现了MainWindow的构造函数,见如下代码:
//.h
private:
Ui::MainWindow *ui;
//.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
这里使用C++的成员初始化列表语法,初始化成员变量指针ui,可这里有个问题,在MainWindow的构造函数中new 一个MainWindow,这又调用一下MainWindow的构造函数,这岂不是会死循环?
二、分析
QT将两个不同的类都命名成了MainWindow,通过namespace进行了区分。Ui命名空间的变量名,和默认空间的变量名虽然一样,但实际是两个不同的东西。所以构造函数中调用MainWindow是没问题的,因为它不是在调用自身,而是在调用其他命名空间下的另一个同名的MainWindow类。
ui_mainwindow.h文件

mainwindow.h文件.

参考:

博客围绕QT生成简单MainWindow工程后,mainwindows.cpp里MainWindow构造函数的问题展开。使用C++成员初始化列表初始化成员变量指针ui时,构造函数中new一个MainWindow看似会造成死循环。经分析,QT用namespace区分了两个同名的MainWindow类,调用没问题。

6186

被折叠的 条评论
为什么被折叠?



