QAbstractFormBuilder Class

QAbstractFormBuilder 类为在运行时创建用户界面的类提供了默认实现。更多

Header: #include <QAbstractFormBuilder>
CMake.QAbstractFormBuilder find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
继承于

QFormBuilder

公共函数

QAbstractFormBuilder()
virtual ~QAbstractFormBuilder()
QString errorString() const
virtual QWidget *load(QIODevice *device, QWidget *parent = nullptr)
virtual void save(QIODevice *device, QWidget *widget)
void setWorkingDirectory(const QDir &directory)
QDir workingDirectory() const

详细说明

QAbstractFormBuilder 为从用户界面文件构造表单提供了一个标准接口和默认实现。它不打算被直接实例化。使用QFormBuilder 类可在运行时从用户界面文件创建用户界面。例如

        MyForm::MyForm(QWidget *parent)
            : QWidget(parent)
        {
            QFormBuilder builder;
            QFile file(":/forms/myWidget.ui");
            file.open(QFile::ReadOnly);
            QWidget *myWidget = builder.load(&file, this);
            file.close();

            auto *layout = new QVBoxLayout(this);
            layout->addWidget(myWidget);
        }

要重写表单生成器行为的某些方面,可子类 QAbstractFormBuilder 并重新实现相关的虚拟函数:

  • load() 处理从任意 QIODevices 读取 UI 格式文件,并从其中包含的 XML 数据构建部件。
  • save() 处理以用户界面格式向任意 QIODevices 保存部件细节。
  • workingDirectory() 和setWorkingDirectory() 控制表单存放的目录。表单生成器会在与该目录相对的路径上查找其他资源。

QFormBuilder 类通常用于嵌入Qt Widgets Designer 的自定义组件和应用程序。需要在运行时动态生成用户界面的独立应用程序则使用QUiLoader ,该类位于 Qt UI Tools模块中。

另请参见 Qt UI Tools.

成员函数文档

QAbstractFormBuilder::QAbstractFormBuilder()

构造一个新的表单生成器。

[virtual noexcept] QAbstractFormBuilder::~QAbstractFormBuilder()

销毁表单生成器。

QString QAbstractFormBuilder::errorString() const

返回load() 中最后一次出错的可读描述。

另请参见 load()。

[virtual] QWidget *QAbstractFormBuilder::load(QIODevice *device, QWidget *parent = nullptr)

从给定的device 中加载 widget 的 XML 表示,并使用指定的parent 构建一个新的 widget。

另请参阅 save() 和errorString()。

[virtual] void QAbstractFormBuilder::save(QIODevice *device, QWidget *widget)

以标准用户界面文件格式将给定widget 的 XML 表示保存到指定的device

注意: 与在Qt Widgets Designer 中保存表单不同,所有属性值都会被写入。这是因为 Qt 属性系统中并不存储属性值是否被修改的状态。正在保存的部件可能是动态创建的,而不是通过load() 加载的,因此在这种情况下,表单生成器并不知道已更改的属性列表。此外,对于动态创建的部件,也没有通用的方法来实现这一点。

因此,在加载 XML 文件之前,应从生成的 XML 文件中删除不需要的属性。另外,如果在调用此方法时已经知道要保存哪些属性,则可以重载computeProperties() 并返回一个经过筛选的所需属性列表。否则,可能会出现意外行为,因为其中一些属性可能相互依赖。

另请参阅 load()。

void QAbstractFormBuilder::setWorkingDirectory(const QDir &directory)

将表单生成器的当前工作目录设置为指定的directory

另请参阅 workingDirectory() 。

QDir QAbstractFormBuilder::workingDirectory() const

返回表单生成器的当前工作目录。

另请参见 setWorkingDirectory()。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.