详解QUiLoader 动态加载.ui文件
2016-01-04 14:57
537 查看
http://blog.chinaunix.net/uid-13838881-id-3652523.html
3.2如使用的是VS开发工具,需要添加QtUiToolsd.lib/QtUiTools.lib 库
4.代码实现:
4.1头文件
[cpp] view plaincopyprint?
#include <QtUiTools/QtUiTools>
4.2核心代码
[cpp] view plaincopyprint?
//传入UI文件路径
QString uifilePath = "./demo.ui";
QUiLoader uiLoader;
QFile file(uifilePath);
file.open(QIODevice::ReadOnly);
//setWorkingDirectory 设置工作目录:若UI文件中引用了其他目录的资源,可在此处设置工作目录
const QDir &workdir(uifileWorkPath);
uiLoader.setWorkingDirectory(workdir);
//加载UI文件
QWidget* getWidget = uiLoader.load(&file,parent);
5.元素查找
对于UI上的各个组件,可用下面方法进行查找
[cpp] view plaincopyprint?
//1.查找名称为“读写的”QPushButton
QPushButton *getButton = getWidget->findChild<QPushButton *>("读写");
//2.查找所有QPushButton
QList<QPushButton *> getAllPButtons = getWidget->findChildren<QPushButton *>();
6.信号槽机制
connect(getButton,SIGNAL(clicked()),this,SLOT(setButtonClicked()));处理ui_setButton的clicked()信号。
但拜元对象机制所赐,还有一劳永逸的方法
QMetaObject::connectSlotsByName(this);该函数会将this的所有子对象都连接上一个槽(slot),槽的命名规范为
on_对象名_信号名,比如上面的setButton的clicked(),将会生成一个on_setButton_clicked()的槽,你只要实现该槽函数就可以了。
1.适用情况:
动态加载UI文件是指,用 Qt Designer 通过拖拽的方式生产.ui 文件。不用 uic工具把.ui 文件变成等价的 c++代码,而是在程序运行过程中需要用到UI文件时,用 QUiLoader 加载.ui文件,达到相同目的。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.适用环境:
1.UI文件是程序运行中途创建生成的,在同程序的其他地方调用,没法进行uic。
2.前端设计和功能实现相分离,前端设计人员和功能实现人员只要事前沟通好相关组件的名称等,就可以进行独立开发,能提高效率。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.配置信息:
3.1若使用的.pro文件生成,需要在.pro文件中需要加上
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
CONFIG += uitools
# Input
FORMS += demo.ui
SOURCES += uiloader.cpp
3.2如使用的是VS开发工具,需要添加QtUiToolsd.lib/QtUiTools.lib 库
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4.代码实现:
4.1头文件
[cpp] view plaincopyprint?
#include <QtUiTools/QtUiTools>
4.2核心代码
[cpp] view plaincopyprint?
//传入UI文件路径
QString uifilePath = "./demo.ui";
QUiLoader uiLoader;
QFile file(uifilePath);
file.open(QIODevice::ReadOnly);
//setWorkingDirectory 设置工作目录:若UI文件中引用了其他目录的资源,可在此处设置工作目录
const QDir &workdir(uifileWorkPath);
uiLoader.setWorkingDirectory(workdir);
//加载UI文件
QWidget* getWidget = uiLoader.load(&file,parent);
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5.元素查找
对于UI上的各个组件,可用下面方法进行查找
[cpp] view plaincopyprint?
//1.查找名称为“读写的”QPushButton
QPushButton *getButton = getWidget->findChild<QPushButton *>("读写");
//2.查找所有QPushButton
QList<QPushButton *> getAllPButtons = getWidget->findChildren<QPushButton *>();
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6.信号槽机制
connect(getButton,SIGNAL(clicked()),this,SLOT(setButtonClicked()));处理ui_setButton的clicked()信号。
但拜元对象机制所赐,还有一劳永逸的方法
QMetaObject::connectSlotsByName(this);该函数会将this的所有子对象都连接上一个槽(slot),槽的命名规范为
on_对象名_信号名,比如上面的setButton的clicked(),将会生成一个on_setButton_clicked()的槽,你只要实现该槽函数就可以了。
相关文章推荐
- QT运行时加载UI文件
- iOS---限制UITextView中的字数
- iOS之UITextField限制字数
- AFNetwork 3.0 源码解读(三)AFURLRequestSerialization
- semantic ui 下拉菜单支持全文搜索/添加列表项/更改事件
- //UITextField控制只输入数字
- 黑马程序员————java基础之GUI
- 电池状态获取(UIDevice、battery、UIDeviceBattery)
- 修改semantic ui 下拉菜单的选中样式以及鼠标移上去的样式
- Android开发中无处不在的设计模式——Builder模式
- ARPG游戏实战之UI框架应用篇
- 使用removeItemWidget时, UI不刷新的问题
- Queue on Bus Stop
- UINavigationController以及UITabBarController背景图片和文字的设置
- easyui 日期控件清空值
- 王立平-- ContentValues , HashTable , HashMap差别
- UIView
- iOS UIScrollView的属性
- Invalid result location value/parameter 解决办法
- Android开发学习之路-使用Handler和Message更新UI