QtCreator生成的MainWindow
代码说:
namespace Ui {
class MainWindow; // forward-declare Ui::MainWindow (?)
}
class MainWindow : public QMainWindow // Declare MainWindow class (Ui::MainWindow?)
{
Q_OBJECT
public:
explicit MainWindow( QWidget *parent = 0 );
/**/ ~MainWindow( void );
// ...
private:
Ui::MainWindow *ui;
// ...
};
main()
:
MainWindow w;
w.show( );
MainWindow::MainWindow( QWidget *parent )
:
ui( new Ui::MainWindow ) // Initialization
我不明白为什么MainWindow
实例在其MainWindow
实例变量中有指向另一个/不同/新ui
的指针。我检测了MainWindow::MainWindow
构造函数,我可以看到它只被调用一次。所以可能是main()
中堆栈上的自动变量。但是构造函数中发生的ui( new Ui::MainWindow )
呢?那就是在堆上创建MainWindow
,不是吗?它是如何初始化的?
也许构造函数中的后续ui->setupUi( this )
正在做一些魔术?否则,似乎这会导致堆栈崩溃,因为每个new MainWindow
创建一个新的MainWindow
来填充其ui
实例变量。
答案 0 :(得分:3)
Ui::MainWindow
类是由uic
从相应的QtDesigner文件生成的代码。
它不是一个小部件,而是一个包含填充小部件的代码的帮助器。
因此,在您的情况下,它是用于填充名为QMainWindow
的{{1}}派生类的代码。
MainWindow
被保存为允许前向声明的指针,并避免构建包含Ui::MainWindow
标头的代码依赖于生成代码(每次在QtDesigner中更改内容时都会更改)
答案 1 :(得分:1)
这里有两个不同的类:
::MainWindow
::Ui::MainWindow
我不会说他们没有关系 - 但他们不是同一个班级。