2

在 Qt 中,我创建了一个没有类的设计器表单。所以基本上,我只有一个文件 myform.ui。我应该写什么代码来显示表单?

4

3 回答 3

6

如果您在该FORMS部分的 .pro 中包含(d)ui 文件,则在构建过程中将生成一个特殊的头文件。包括这个头文件并使用它在运行时将子小部件添加到您想要的任何 QWidget。

此示例中的 ui 文件称为mywidget.ui。在您的 .pro 文件中,有一行说

FORMS += mywidget.ui

QtCreator 将在项目资源管理器中显示该文件。这一步很重要,否则构建项目时不会生成任何头文件!

然后将生成的头文件称为ui_mywidget.h并调用组成设计窗口的类Ui::MyWidget,可以按如下方式使用。

解决方案 1 (当您创建一个新的“ Qt Designer Form Class ”时,QtCreator 建议的方式):

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();

private:
    Ui::MyWidget *ui;     // Pointer to the UI class where the child widgets are
};

#include "ui_mywidget.h"
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);    // Create and add the child widgets to this widget
}

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

然后这个小部件就可以使用了,并且在实例化它时将包含您在设计器中创建的子小部件:

MyWidget widget;
widget.show();

解决方案2(不继承自QWidget):

#include "ui_mywidget.h"
...
QWidget *widget = new QWidget(...);
Ui::MyWidget ui;         // Instance of the UI class where the child widgets are
ui.setupUi(widget);      // Create and add the child widgets to this widget
widget->show();
...
于 2012-10-05T17:14:36.083 回答
0

您可以使用QUiLoader加载 ui 文件。

于 2012-10-05T16:49:20.553 回答
0

这里解释了使用 ui 文件的官方方法。

如您所见,您有两个选项:“在编译时处理 ui 文件”或“在运行时”。

关于编译时处理,您还有其他三个子案例:“直接方法”(经典方法,在您创建新的“Qt Designer 表单类”时采用)和“单继承”/“多继承方法”。在上述文章中,您将找到所有详细信息。

于 2020-10-05T07:48:49.793 回答