C++ 在QT中创建具有表单的小部件时的递归构造函数调用?

C++ 在QT中创建具有表单的小部件时的递归构造函数调用?,c++,qt,C++,Qt,我试图理解在使用表单创建QWidget时自动生成的代码 这是QT生成的代码: ********************************************************************** * widget.h ********************************************************************** #ifndef WIDGET_H #define WIDGET_H #include <QWidget&

我试图理解在使用表单创建QWidget时自动生成的代码

这是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();
}
我的问题是关于构造器中的这句话:

uinewui::Widget

这是在调用类Widget的构造函数时创建一个新的Widget。
就像是递归,不是吗?为什么它没有中断?

它不是递归的,而是ui\u Widget.h类的实例,因为您一次只需要一个GUI实例 这种方法的优点是可以向前声明用户界面对象,这意味着我们不必在头中包含生成的ui_Widget.h文件。然后可以更改表单,而无需重新编译依赖源文件。如果类受到二进制兼容性限制,这一点尤其重要
位于cpp a内部,不在头文件中。由于名称空间的原因,有两个不同的类具有相同的名称:

Ui::小部件

小部件


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

您确定它是递归的吗?有一个Ui名称空间可以抵消它。您忽略的是名称空间的工作,以减少歧义,以及为什么不应该使用名称空间uu名称空间u name;。。。