QUiLoader类

QUiLoader类允许独立应用程序在运行时动态创建用户界面,使用UI文件中存储的信息或通过插件路径指定的信息。《更多...》

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

公共函数

QUiLoader(QObject *parent = nullptr)
virtual~QUiLoader() override
voidaddPluginPath(const QString &path)
QStringListavailableLayouts() const
QStringListavailableWidgets() const
voidclearPluginPaths()
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())
QStringerrorString() const
boolisLanguageChangeEnabled() const
QWidget *load(QIODevice *device, QWidget *parentWidget = nullptr)
QStringListpluginPaths() const
voidsetLanguageChangeEnabled(bool enabled)
voidsetWorkingDirectory(const QDir &dir)
QDirworkingDirectory() const

详细描述

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

如果您有自定义组件或嵌入Qt Designer的应用程序,您还可以使用QFormBuilder类来从UI文件创建用户界面。

QUiLoader类提供了一组函数,允许您基于存储在UI文件(使用Qt Designer创建)或指定插件路径中可用的信息创建小部件。指定的插件路径可以使用pluginPaths()函数获取。同样,可以使用load()函数获取UI文件的内容。例如

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()函数返回一个包含指定插件路径中所 available小部件的类名的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()函数。

createAction()、createActionGroup()、createLayout()、和createWidget()函数分别用于内部定义的QUiLoader类时创建操作、操作组、布局或小部件。因此,您可以继承QUiLoader类并重新实现这些函数,以干预用户界面的构建过程。例如,您可能想检查加载表单或创建自定义小部件时创建的操作列表。

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

另请参阅Qt UI ToolsQFormBuilder

成员函数文档

[显式] QUiLoader::QUiLoader(QObject *parent = nullptr)

创建一个具有指定parent的表单加载器。

[覆盖虚故不抛出异常] 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

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

创建一个新的动作,具有指定的 parentname

函数也被 QUiLoader 类在创建小部件时内部使用。因此,您可以派生 QUiLoader 并重新实现此函数以干预创建用户界面或小部件的过程。但是,在您的实现中,确保首先调用 QUiLoader 的版本。

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

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

创建一个新的动作组,具有指定的 parentname

函数也被 QUiLoader 类在创建小部件时内部使用。因此,您可以派生 QUiLoader 并重新实现此函数以干预创建用户界面或小部件的过程。但是,在您的实现中,确保首先调用 QUiLoader 的版本。

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

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

使用由 className 指定的类创建一个新的布局,具有给定的 parentname

函数也被 QUiLoader 类在创建小部件时内部使用。因此,您可以派生 QUiLoader 并重新实现此函数以干预创建用户界面或小部件的过程。但是,在您的实现中,确保首先调用 QUiLoader 的版本。

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

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

使用通过 className 指定的类创建一个新的小部件,具有给定的 parentname。您可以使用此函数创建 availableWidgets() 函数返回的任何小部件。

函数也被 QUiLoader 类在创建小部件时内部使用。因此,您可以派生 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 以保存其内容。

参见createWidget() 和 errorString().

QStringList QUiLoader::pluginPaths() const

返回一个命名搜索器将在此路径中搜索自定义小部件插件的路径列表。

参见addPluginPath() 和 clearPluginPaths().

void QUiLoader::setLanguageChangeEnabled(bool enabled)

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

参见isLanguageChangeEnabled().

void QUiLoader::setWorkingDirectory(const QDir &dir)

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

参见workingDirectory().

QDir QUiLoader::workingDirectory() const

返回加载器的工作目录。

参见setWorkingDirectory().

© 2024 The Qt Company Ltd. 本文档中包含的文档贡献的版权属于其各自的所有者。本提供的文档根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 许可。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰及/或在其他全球国家的商标。所有其他商标均为其各自所有者的财产。