哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2010/08/09/5798359.aspx
接着上一篇 ui在程序中的使用的例子进行ui动态加载的讲解
Qt提供了一个QtUiTools模块,包含了与ui相关的类,如QUiLoader,可使程序在运行中动态加载Designer设计生成的.ui文件,本实例即利用QUiLoader类实现实例10中的弹出子窗口显示部分。
实现动态加载ui,首先需在程序中包含QtUiTools模块的头文件:
#include <QtUiTools>
并且新建一个.qrc文件,描述.ui文件的路径:
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>forms/third.ui</file>
</qresource>
</RCC>
将弹出子窗口的.ui文件放在forms目录下。
在程序的.pro文件中加入以下两行代码:
CONFIG += uitools
RESOURCES += uiloader.qrc
最后修改slotChild()槽函数的实现代码如下:
void MyWidget::slotChild()
{
1 QUiLoader loader;
2 QFile file(":/forms/third.ui");
3 file.open(QFile::ReadOnly);
4 QWidget *third = loader.load(&file);
5 file.close();
6 third->show();
}
第1行新建一个QUiLoader对象。
第2行指定所需.ui文件的路径,新建一个QFile对象。
第3行以只读方式打开此文件。
第4行调用QUiLoader对象的load()函数将.ui文件装载到一个QWidget对象中,并将此QWidget对象返回。
第5行关闭文件。
第6行调用show()显示此子窗口。
这种动态加载的方式不用生成ui_third.h文件,在程序运行时才会被加载。采用这种方式最大的好处是可以在不重新编译程序的情况下,改变窗口的布局和显示。但也存在不方便的地方,即在主程序中无法对子窗口的控件进行操作。