在QT中使用表单创建窗口小部件时递归构造函数调用?

时间:2019-02-03 10:24:57

标签: c++ qt

我试图理解在创建带有表单的QWidget时自动生成为什么QT的代码。

这是QT生成的代码:

**********************************************************************
*  widget.h
**********************************************************************

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);

    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H
#endif // WIDGET_H

**********************************************************************
*  widget.cpp
**********************************************************************

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

**********************************************************************
*  main.cpp
**********************************************************************

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

我的问题是在构造函数中使用以下语句:

ui(新的Ui :: Widget)

这是在调用Widget类的构造函数时创建的新Widget。 就像递归不是吗?为什么不打破?

2 个答案:

答案 0 :(得分:1)

但不是递归它是你ui_Widget.h类的实例,因为你在一个时间
需要你的GUI只有一个实例 这种方法的优点是用户界面对象可以向前申报,这意味着我们不必包含在标题中产生ui_Widget.h文件。然后可以更改表格,而无需重新编译相关的源文件。如果该类受到二进制兼容性限制,则这尤其重要。因为您可以看到“ #include“ ui_widget.h” 在cpp中,不在头文件中

答案 1 :(得分:0)

否。由于存在命名空间,因此存在两个具有相同名称的不同类:

Ui :: Widget

小部件

Ui :: Widget是表单对象的类。