一、问题
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文件.
参考: