我试图理解在创建带有表单的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。 就像递归不是吗?为什么不打破?
答案 0 :(得分:1)
但不是递归它是你ui_Widget.h类的实例,因为你在一个时间
需要你的GUI只有一个实例
这种方法的优点是用户界面对象可以向前申报,这意味着我们不必包含在标题中产生ui_Widget.h文件。然后可以更改表格,而无需重新编译相关的源文件。如果该类受到二进制兼容性限制,则这尤其重要。因为您可以看到“ #include“ ui_widget.h”
在cpp中,不在头文件中
答案 1 :(得分:0)
否。由于存在命名空间,因此存在两个具有相同名称的不同类:
Ui :: Widget
和
小部件
Ui :: Widget是表单对象的类。