Qt/C++使用QUiLoader动态加载ui资源文件

2023-11-18


动态对话框

动态对话框(dynamic dialog)就是在程序运行时使用的从Qt设计师的.ui文件创建而来的那些对话框。动态对话框不需要通过uic把 .ui文件转换成C++代码,相反,它是在程序运行的时候使.用QUiLoader 类载人该文件的。

使用场景

动态对话框使不重新编译应用程序而可以改变窗体布局的做法成为可能。动态对话框也同样可用于创建小型终端应用程序,这些程序只有一个内置的前端窗体,并且只是在需要的时候才会去创建所有的其他窗体。还可以使得界面设计和逻辑的相互分离,前后端同时开发。效率更高。

注意事项

该功能在Qt4中就引入了,如果你是在Qt5或者更高版本还需要配置Qt5UiTools.lib库。我的路径为xx\Qt\5.15.2\msvc2019_64\lib\Qt5UiToolsd.lib。关于加载静态库这里不再赘述,直接贴出代码,如果你也是用qt create开发那么你只需要修改路径就可以使用了。

LIBS += -LD:/Qt/5.15.2/msvc2019_64/lib/ -lQt5UiTools

动态对话框加载

加载需要用到QUiLoader这个类,通过load方法将文件加载进去。通过获取返回值来判断是否加载成功,然后就可以做出对应的处理。

#include <QtUiTools/QUiLoader>
	QUiLoader uiloader;
    QFile file("./testDialog.ui");
    QWidget* testDialog = uiloader.load(&file);
    if(testDialog != nullptr)
    {
        testDialog->show();
    }

获取动态对话框的控件对象

可以使用QObject::findChild\<T>()来访问这个窗体中的各个控件。

说明:findChild\<T>()函数是一个模板成员函数,它可以返回与给定的名字和类型相匹配的子对象。

    QPushButton* btn = testDialog->findChild<QPushButton*>("pushButton");
    if(btn != nullptr)
    {
        qDebug() << btn->text();
        btn->setEnabled(false);
    }

与动态对话框建立关联

还可以使用connect关联动态对话框的控件。在使用上与正常的ui文件没有任何区别。

下面这段会让我点击该按钮,让"林夕07"这个按钮解除禁用。

    btn2 = testDialog->findChild<QPushButton*>("pushButton_2");
    if(btn2 != nullptr)
    {
        connect(btn2, &QPushButton::clicked, this, [&](){ btn->setEnabled(true);});
    }

左边是点击"我改变了"的按钮前,右侧是点击后,可以看到"林夕07"按钮已解除禁用状态了。
在这里插入图片描述

动态修改ui资源文件效果测试

下面的DynamicDialog.exe是测试程序,testDialog.ui是我们需要动态加载的ui文件。
在这里插入图片描述
点击DynamicDialog.exe测试效果
在这里插入图片描述

然后我将testDialog.ui的内容进行修改再次测试。
在这里插入图片描述
可以看到我们原本的控件位置都移动了,甚至我们还添加了新的控件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt/C++使用QUiLoader动态加载ui资源文件 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler

随机推荐

  • 如何屏蔽某网站

    博主用电脑的时候用一会儿总是控制不住就刷起了知乎 然后在蹉跎中度过了美好的时光 于是决定屏蔽知乎等让我分心的网站 希望能够专注于眼前的事 此方法治标不治本 因为能屏蔽也能让它恢复 因此想要真正不分心还得提高自制力 我的思路是修改host文件
  • 网页一键生成app软件_工程人必须拥有的4个自动生成软件,操作简单,一键输入直接生成...

    工程人必须拥有的4个自动生成软件 操作简单 一键输入直接生成 还在为写技术交底而头疼吗 还在为经常熬夜而烦恼吗 还在为没有好的模板而郁闷吗 这些都是工程人的通病 作为工程人深有同感 如果有一个能一键操作 就能自动生成技术交底的软件 是不是很
  • 【华为OD机试真题2023B卷 JAVA&JS】宜居星球改造计划

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 宜居星球改造计划 知识点广搜 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 2XXX年 人类通过对火星的大气进行宜居改造分析 使得火星已在理论上具备人类宜居的条件 由于
  • C# 监听http请求

    直接上代码 public partial class FrmHome Form HttpListener verifyHttplisten private object listenLocker new object Thread Thre
  • vscode go mod报错(萌新)

    出现如下报错信息 gopls was not able to find modules in your workspace When outside of GOPATH gopls needs to know which modules y
  • Arduino 运行 Rust

    项目设置 首先 我们将通过运行来创建一个新的 cargo 项目 我们需要为 avr 目标 目标三元组 avr unknown unknown 交叉编译我们的项目 为此 我们需要切换到 nightly 工具链 因为一些依赖包使用不稳定的功能来
  • 浅谈Java平台无关性

    为什么Java要支持平台无关性 众所周知 Java是平台无关的语言 那么Java为什么要支持平台无关性 总结一下 有如下几点 支持多变的网络环境 如今是一个互联网的时代 网络将各种各样的计算机和设备连接起来 比如网络连接了windows的P
  • 仪表放大器 电流的检测

    完美的减法运算放大电路 引入缓冲器 固定增益的双运放仪表放大器 12倍放大 电流的检测 错误接法 正确接法
  • LVS的原理

    一 LVS的介绍 linux virtual server简称LVS Internet的快速增长使多媒体网络服务器面对的访问数量快速增加 服务器需要具备提供大量并发访问服务的能力 因此对于大负载的服务器来讲 CPU I O处理能力很快会成为
  • 最火爆的开源流式系统Storm vs 新星Samza

    分布计算系统框架 按照数据集的特点来说 主要分为data flow和streaming两种 data flow主要是以数据块为数据源来处理数据 代表有 MR Spark等 我称作它们为大数据 而streaming主要是处理单位内得到的数据
  • Python每日一题 - 9 - 暂停5秒输出问题

    前言 本人因喜欢python和c语言等程序设计语言 希望能够在这里和大家共同学习共同进步 因个人喜好喜欢做题 所以想出一个系列专栏关于python的习题专集 希望大家喜欢 希望能在这里分享学习的一些知识碎片 接触时间不长 如果文章有任何错误
  • java中的八种数据类型、变量与常量

    内存空间所占字节数 8位等于1字节 数值型 1 整数类型 byte 1 short 2 int 4 long 8 2 浮点类型 float 4 double 8 字符型 char 2 布尔型 boolean 1或4 取值范围 byte 12
  • vue3.0全局引入sass

    在项目开发过程中 有一些共同的sass样式我想抽出封装到一个文件 利用sass的mixin语法来封装变量 但是在这个过程中一直会报错 先是识别不出来 mixin 和 include 后来是报错sass等一些插件的问题 后来是这样解决的 首先
  • C++ 简介

    C c plus plus 是一种静态类型的 编译式的 通用的 大小写敏感的 不规则的编程语言 支持过程化编程 面向对象编程和泛型编程 C 被认为是一种中级语言 它综合了高级语言和低级语言的特点 C 是由 Bjarne Stroustrup
  • 模仿苹果手机虚拟键的代码分享,有兴趣的可以玩玩。 下面的是链接,复制粘贴到浏览器就能下载...

    http files cnblogs com files godlovexq 模仿苹果虚拟home键的效果有解释的 zip 转载于 https www cnblogs com godlovexq p 5252782 html
  • C语言函数大全-- i 开头的函数

    i 开头的函数 1 imagesize 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 initgraph 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 inport 3 1 函数说明 3 2 演示示例 4 insli
  • 再探ROP(上)

    0x00 前言 毕设和论文要搞吐了 再加上实习工作上的事情 近期又要开始准备HW的事情 只能先更新一部分 0x01 从x86到x64 之前的rop都是32bit的程序 由于这篇文章涉及的方法用于64bit的程序 这里先说一下两者的区别 做一
  • 数值分析(10)-数值微分

    整理一下数值分析的笔记 目录 1 误差 2 多项式插值与样条插值 3 函数逼近 4 数值积分与数值微分 THIS 5 线性方程组的直接解法 6 线性方程组的迭代解法 7 非线性方程求根 8 特征值和特征向量的计算 9 常微分方程初值问题的数
  • Docker - 超轻量中文ocr开源项目 chineseocr_lite 搭建

    Docker 超轻量中文ocr开源项目 chineseocr lite 搭建 一 OCR Docker 部署 二 Flask RESTful API demo chineseocr lite 源码地址 https github com ou
  • Qt/C++使用QUiLoader动态加载ui资源文件

    目录 动态对话框 使用场景 注意事项 动态对话框加载 获取动态对话框的控件对象 与动态对话框建立关联 动态修改ui资源文件效果测试 动态对话框 动态对话框 dynamic dialog 就是在程序运行时使用的从Qt设计师的 ui文件创建而来