10.4 运行时加入处理.ui 文件的方法

借助 Qt 提供的 QtUiTools 模块以及其中的 QUiLoader 类我们可以实现在运行时获取并 加载.ui 文件。我们可以使用任何 QIODevice 的实例来读取用户界面架构,通常使用 QFile 类的实例。QUiLoader::load() 方法读取了.ui 文件中包含的界面架构并将它赋予一个 QWidget 子类化的实例。

本节介绍的实例名为 calculatorbuilder,仍然实现简单的加法计算功能,只不过是采 用动态加载.ui 文件的方法完成的。

要实现动态加载 ui,首先需在程序中包含 QtUiTools 模块的头文件:

#include <QtUiTools>

然后新建一个.qrc 文件,描述.ui 文件的路径:

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

将弹出子窗口的.ui 文件放在工程目录下。

接下来,在程序的.pro 文件中手动加入以下两行代码:

CONFIG += uitools
RESOURCES += calculatorbuilder.qrc

我们对下面的重点代码进行讲解。

QUiLoader loader;
QFile file(":/forms/calculatorform.ui");
file.open(QFile::ReadOnly);
QWidget *formWidget = loader.load(&file, this);
file.close();

第 1 行新建一个 QUiLoader 实例。

第 2 行指定所需.ui 文件的路径,新建一个 QFile 实例。 第 3 行以只读方式打开此文件。

第 4 行调用 QUiLoader 对象的 load()函数将.ui 文件装载到一个 QWidget 对象中,并将 此 QWidget 对象返回。

第 5 行关闭文件。

大家应该看出来了,采用动态加载.ui 文件的方式的最大好处是我们随时可以调整用户 界面的布局和显示,而不用重新编译应用程序。