QUiLoader 动态加载.ui文件


	动态加载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?

  1. #include <QtUiTools/QtUiTools>

4.2核心代码

[cpp] view plaincopyprint?

  1. //传入UI文件路径
  2. QString uifilePath = "./demo.ui";
  3. QUiLoader uiLoader;
  4. QFile file(uifilePath);
  5. file.open(QIODevice::ReadOnly);
  6. //setWorkingDirectory 设置工作目录:若UI文件中引用了其他目录的资源,可在此处设置工作目录
  7. const QDir &workdir(uifileWorkPath);
  8. uiLoader.setWorkingDirectory(workdir);
  9. //加载UI文件
  10. QWidget* getWidget = uiLoader.load(&file,parent);
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

5.元素查找

对于UI上的各个组件,可用下面方法进行查找

[cpp] view plaincopyprint?

  1. //1.查找名称为“读写的”QPushButton
  2. QPushButton *getButton = getWidget->findChild<QPushButton *>("读写");
  3. //2.查找所有QPushButton
  4. 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()的槽,你只要实现该槽函数就可以了。

时间: 2024-11-03 20:54:40

QUiLoader 动态加载.ui文件的相关文章

Qt动态加载ui文件(实现加载客户自定义的一些widget,如QVTKWidget)

利用Qt动态加载ui文件主要是实现ui设计和软件设计的分离,ui只需要向编程人员提供各个控件名称即可.这样做可以满足软件设计后期,由于客户需求,ui风格多变的情况下,不影响编程人员的开发. 具体实现:网上资料较多,一般利用QuiLoader ,只能加载Qwidget 或者QFrame,以下代码主要实现加载的Qwidget 窗口的子窗口有一些用户自定义的Widget ,这里我想加载的是QVTKWidget QString uiFilePath = "E:\\TASK\\CTSoftware\\Qt

如何按需动态加载js文件

JavaScript无非就是script标签引入页面,但当项目越来越大的时候,单页面引入N个js显然不行,合并为单个文件减少了请求数,但请求的文件体积却很大.这时候最好的做法就是按需引入,动态引入组件js和样式,文件load完成后调用callback,运行js.代码还是很简便的.塔河县臧清机械 1. 判断文件load完成.加载状态ie为onreadystatechange,其他为onload.onerror 01 if(isie){ 02     Res.onreadystatechange =

Java中动态加载jar文件和class文件

概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下的jar文件以及classes目录下的class文件,另外像spring这类框架,也可以根据指定的路径扫描并加载指定的类文件,这个技术可以实现一个容器,容纳各类不同的子应用. Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,不像C加载动态链接库只要一个文件名就可以搞定,但JDK仍提供了一整套方法来动态加载jar文件和class文件. 动态加载jar文件 // 系统类库路径 File libPath =

急!!!关于drools动态加载规则文件

最近遇到一个问题 需要使用drools动态加载规则文件 在网上找了点资料 看了几篇代码 基本都是与框架分离开的 现在需要将drools动态加载与spring框架集成  要是有这方面的大神希望可以指点一番  急~~~  需求:将规则文件存入数据库中 实现动态加载调用 与spring框架集成 还要考虑到线程安全 要是有经验的大神 一定指点一番 谢谢啦

两种动态加载JavaScript文件的方法

两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看下 动态加载script到页面大约有俩方法 第一种便是利用ajax方式,把script文件代码从背景加载到前台,而后对加载到的内容经过eval()实施代码.第二种是,动静创建一个script标签,配置其src属性,经过把script标签插入到页面head来加载js,相当于正在head中写了一个<sc

为了提高性能,如何动态加载JS文件

超级表格是一款多人协作的在线表格,程序相当复杂,用到十几个JS文件.但是有些文件是在打开某些类型的表格时才需要加载. 例如,只有当打开甘特图表格时,才需要加载gantetu.js文件. 那么问题来了,为了减少js文件数量和请求,如何在需要时自动加载js文件呢? 办法如下. //动态加载js文件function mcss_importJS(js){ var oHead = document.getElementsByTagName('HEAD').item(0); var oScript= doc

Java_Java中动态加载jar文件和class文件

转自:http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下的jar文件以及classes目录下的class文件,另外像spring这类框架,也可以根据指定的路径扫描并加载指定的类文件,这个技术可以实现一个容器,容纳各类不同的子应用. Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,不像C加载动态链接库只要一个文件名就可以搞定,但JDK仍

动态加载script文件

动态加载script文件:   http://www.cnblogs.com/skykang/archive/2011/07/21/2112685.html

jquery如何动态加载js文件

jquery如何动态加载js文件:本章节和大家分享一下几种动态加载js文件的方法,希望能够给需要的朋友带来帮助.方法一: $.getscript("test.js"); 方法二: function loadjs(file) { var head = $('head').remove('#loadscript'); $("<scri"+"pt>"+"</scr"+"ipt>").att