QUiLoader Class

QUiLoader 类可让独立应用程序在运行时使用 UI 文件中存储的信息或插件路径中指定的信息动态创建用户界面。更多

头文件: #include <QUiLoader>
CMake: find_package(Qt6 REQUIRED COMPONENTS UiTools)
target_link_libraries(mytarget PRIVATE Qt6::UiTools)
qmake: QT += uitools
继承: QObject

公共函数

QUiLoader(QObject *parent = nullptr)
virtual ~QUiLoader() override
void addPluginPath(const QString &path)
QStringList availableLayouts() const
QStringList availableWidgets() const
void clearPluginPaths()
virtual QAction *createAction(QObject *parent = nullptr, const QString &name = QString())
virtual QActionGroup *createActionGroup(QObject *parent = nullptr, const QString &name = QString())
virtual QLayout *createLayout(const QString &className, QObject *parent = nullptr, const QString &name = QString())
virtual QWidget *createWidget(const QString &className, QWidget *parent = nullptr, const QString &name = QString())
QString errorString() const
bool isLanguageChangeEnabled() const
QWidget *load(QIODevice *device, QWidget *parentWidget = nullptr)
QStringList pluginPaths() const
void setLanguageChangeEnabled(bool enabled)
void setWorkingDirectory(const QDir &dir)
QDir workingDirectory() const

详细说明

此外,你还可以通过派生自己的加载器类来定制或创建自己的用户界面。

如果您有一个自定义组件或一个嵌入Qt Widgets Designer 的应用程序,您也可以使用QtDesigner 模块提供的QFormBuilder 类从 UI 文件创建用户界面。

QUiLoader 类提供了一系列函数,允许你根据 UI 文件(通过Qt Widgets Designer 创建)中存储的信息或指定插件路径中的可用信息创建部件。可以使用pluginPaths() 函数检索指定的插件路径。同样,也可以使用load() 函数获取用户界面文件的内容。例如

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    QUiLoader loader;
    QFile file(":/forms/myform.ui");
    file.open(QFile::ReadOnly);
    QWidget *myWidget = loader.load(&file, this);
    file.close();

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

通过将用户界面包含在表单的资源 (myform.qrc) 中,我们可以确保它在运行时存在:

<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/forms">
<file>myform.ui</file>
</qresource>
</RCC>

availableWidgets() 函数返回一个QStringList ,其中包含指定插件路径中可用部件的类名。要创建这些部件,只需使用createWidget() 函数即可。例如

QWidget *loadCustomWidget(QWidget *parent)
{
    QUiLoader loader;
    QWidget *myWidget;

    QStringList availableWidgets = loader.availableWidgets();

    if (availableWidgets.contains("AnalogClock"))
        myWidget = loader.createWidget("AnalogClock", parent);

    return myWidget;
}

要向加载器提供自定义部件,可以使用addPluginPath() 函数;要移除所有可用部件,可以调用clearPluginPaths() 函数。

每当 QUiLoader 类需要创建动作、动作组、布局或部件时,都会在内部使用createAction(),createActionGroup(),createLayout() 和createWidget() 函数。因此,您可以子类化 QUiLoader 类并重新实现这些函数,以干预用户界面的构建过程。例如,在加载表单或创建自定义 widget 时,您可能希望获得创建的操作列表。

有关使用 QUiLoader 类的完整示例,请参阅计算器生成器

另请参见 Qt UI ToolsQFormBuilder

成员函数文档

[explicit] QUiLoader::QUiLoader(QObject *parent = nullptr)

使用给定的parent 创建表格加载器。

[override virtual noexcept] QUiLoader::~QUiLoader()

销毁装载机。

void QUiLoader::addPluginPath(const QString &path)

将给定的path 添加到加载器查找插件时搜索的路径列表中。

另请参阅 pluginPaths() 和clearPluginPaths()。

QStringList QUiLoader::availableLayouts() const

返回可使用createLayout() 函数构建的所有可用布局的列表。

另请参见 createLayout()。

QStringList QUiLoader::availableWidgets() const

返回一个列表,其中列出可使用createWidget() 函数构建的所有可用部件,即在给定插件路径内指定的所有部件。

另请参见 pluginPaths() 和createWidget()。

void QUiLoader::clearPluginPaths()

清除加载器查找插件时搜索的路径列表。

另请参阅 addPluginPath() 和pluginPaths()。

[virtual] QAction *QUiLoader::createAction(QObject *parent = nullptr, const QString &name = QString())

使用给定的parentname 创建一个新动作。

QUiLoader 类在创建部件时也会使用该函数。因此,您可以子类化QUiLoader 并重新实现该函数,以干预用户界面或部件的构建过程。不过,在实现过程中,请确保首先调用QUiLoader 的版本。

另请参见 createActionGroup()、createWidget() 和load()。

[virtual] QActionGroup *QUiLoader::createActionGroup(QObject *parent = nullptr, const QString &name = QString())

使用给定的parentname 创建一个新的操作组。

QUiLoader 类在创建部件时也会使用该函数。因此,您可以子类化QUiLoader 并重新实现该函数,以干预用户界面或部件的构建过程。不过,在实现过程中,请确保首先调用QUiLoader 的版本。

另请参见 createAction()、createWidget() 和load()。

[virtual] QLayout *QUiLoader::createLayout(const QString &className, QObject *parent = nullptr, const QString &name = QString())

使用className 指定的类,用给定的parentname 创建新布局。

QUiLoader 类在创建部件时也会使用该函数。因此,您可以子类化QUiLoader 并重新实现该函数,以干预用户界面或部件的构建过程。不过,在实现过程中,请确保首先调用QUiLoader 的版本。

另请参阅 createWidget() 和load()。

[virtual] QWidget *QUiLoader::createWidget(const QString &className, QWidget *parent = nullptr, const QString &name = QString())

使用className 指定的类,用给定的parentname 创建一个新的 widget。您可以使用该函数创建availableWidgets() 函数返回的任何部件。

QUiLoader 类在创建 widget 时也会使用该函数。因此,您可以子类化QUiLoader 并重新实现该函数,以干预构建用户界面或部件的过程。不过,在实现过程中,请确保首先调用QUiLoader 的版本。

另请参阅 availableWidgets() 和load()。

QString QUiLoader::errorString() const

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

另请参见 load()。

bool QUiLoader::isLanguageChangeEnabled() const

如果启用了语言变化时的动态重译,则返回 true;否则返回 false。

另请参阅 setLanguageChangeEnabled().

QWidget *QUiLoader::load(QIODevice *device, QWidget *parentWidget = nullptr)

从给定的device 中加载表单,并用给定的parentWidget 创建一个新的 widget 来保存表单内容。

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

QStringList QUiLoader::pluginPaths() const

返回加载器查找自定义 widget 插件时所搜索路径的列表。

另请参阅 addPluginPath() 和clearPluginPaths()。

void QUiLoader::setLanguageChangeEnabled(bool enabled)

如果enabled 为 true,则此加载器加载的用户界面将在收到语言更改事件时自动重新翻译。否则,用户界面将不会重新翻译。

另请参见 isLanguageChangeEnabled().

void QUiLoader::setWorkingDirectory(const QDir &dir)

将加载器的工作目录设置为dir 。加载器将在该目录的相对路径中查找其他资源,如图标和资源文件。

另请参阅 workingDirectory() 。

QDir QUiLoader::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.