除了在编译时处理ui文件外,Qt还提供了在运行时动态加载ui文件的机制。通过QtUiTools模块的QUiLoader可以在运行时加载ui文件。
加载ui文件的方式如以下代码所示:
QWidget* TextFinder::loadUiFile()
{
QUiLoader loader;
QFile file(":/forms/textfinder.ui"); // 文件名可以是绝对路径或相对于应用程序的相对路径
file.open(QFile::ReadOnly);
QWidget *formWidget = loader.load(&file, this);
file.close();
return formWidget;
}
使用方式:
ui_lineEdit = qFindChild<QLineEdit*>(formWidget, "lineEdit"); // 需要指定对象的名字QUiLoader类放在一个独立的库中。
为了在应用程序中使用QUiLoader,必须在工程文件 .pro 中加入一行内容:
CONFIG += uitools
在实际项目中,动态加载ui文件的需求似乎不怎么强烈,我所经历的项目就还从来没有使用过这种方式。