Qt开发技巧(八)自带对话框的美化,内置快捷代码段,巧用匿名槽函数,另类动态换肤,资源动态加载

news2024/9/28 16:39:26

继续讲一些Qt开发中的技巧操作:
1.自带对话框的美化
Qt中有一些自带的对话框,比如文件选择对话框,颜色选择对话框等等,这些对话框看着跟系统的对话框没太大差别,实际这是Qt有意为之,为的是跟系统保持一致。但实际是可以美化这些对话框的,做出你自己风格的样式,只需要设置一个属性。

QFileDialog *fileDialog = new QFileDialog(this);
//不设置此属性根本查找不到任何子元素,因为默认采用的系统对话框
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
qDebug() << fileDialog->findChildren<QLabel *>();

当设置了这个属性后,你就可以对里边的子控件进行样式设置进行美化。

在这里插入图片描述
2.内置快捷代码段
QtCreator集成开发环境,也内置了对快速添加注释的支持,比如最常用的在头文件开头添加一大段通用模板的注释,标注文件创建者、时间等信息。
在菜单->工具->选项->文本编辑器->右侧tab页面片段(snippets);选择“C++”,看到蛮多注释样例。
在这里插入图片描述
使用方法很简单,比如你要快速创建一个继承自QObject的类,只要写代码时输入“class”,就会有很多快捷提示,如果你选择“class derived from QObject”,会自动给你创建一个继承自QObject的类,够方便吧~
在这里插入图片描述
在这里插入图片描述
3.巧用匿名槽函数
Qt完全支持标准C++的规则(新版本都尽量第一时间加入最新的标准进去了)比如说lambda表达式。在Qt中一些简单的处理逻辑强烈推荐直接使用lambda表达式直接处理完,他有个专用称呼叫:匿名槽函数。
普通写法:
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::test_fun);
void MainWindow::test_fun()
{
QMessageBox::about(this, “title”, “button clicked!!”);
}
匿名槽函数写法:
connect(ui->pushButton, &QPushButton::clicked, this, ={
QMessageBox::about(this, “title”, “button clicked!!”); });
//另类写法,支持lambda表达式,直接执行代码
connect(ui->pushButton, &QPushButton::clicked, [this] {test_fun();});
是不是很方便,当然也可以传参等等,去好好研究下吧~
4.另类动态换肤
Qt样式表有多种运行机制,继承自QWidget的类和qApp类都支持setStyleSheet方法,根据各种需求场景,还可以统一将样式表放在文件,或者将样式文件加入到资源文件,多研究样式表的接入方式,和应用方法,可以更规范更巧妙的完成一些动态换肤等高端操作。

比如下面阶梯式接入方式:
老板拿你当仇寇:那个控件需要要样式,直接对应控件鼠标右键弹出菜单选择改变样式表填入内容;
老板拿你当猪仔:qss内容写得到处都是,哪里需要就写在哪里,各种控件调用 setStyleSheet方法传入样式表内容;
老板拿你当牛马:qss内容放在文件,读取文件内容设置样式表,程序发布的时候带上qss文件;
老板拿你当员工:qss文件作为资源文件放到qrc文件,直接编译到可执行文件中,防止篡改;
老板拿你当心腹:在qss文件中自定义一些标志充当变量使用,读取以后替换对应的变量为颜色值,类似动态
换肤;
老板拿你当亲儿子:放在文件容易被篡改,集成到可执行文件不够灵活,一旦样式表更新需要重新编译文件,如何做到既能只更新样式表文件,又不需要重新编译可执行文件,又能防止被篡改:采用rcc命令将资源文件编译生成二进制,只需要替换该二进制文件即可;
你就是老板:继承qstyle类自己实现完成所有样式接口,统一整体风格,大名鼎鼎新一代国产Linux操作系统UOS的默认规则就是如此,不允许用样式表,全部painter绘制,没错UOS操作系统的桌面就是用Qt编写的。当然如果你的程序就是运行在UOS上,并且你也用Qt编写,如果遇到一些深度问题,UOS的技术支持老师会告诉你,UOS桌面就是用Qt编写的,可能是这块引起的冲突,哈哈;

5.资源动态加载
当Qt中编译资源文件太大时,效率很低,或者需要修改资源文件中的文件比如图片、样式表等,需要重新编译可执行文件,这样就很麻烦。其实Qt都给我们考虑好了策略,此时可以将资源文件转化为二进制的rcc文件,这样就将资源文件单独出来了,可在需要的时候动态加载。

//Qt中使用二进制资源文件方法如下
//将qrc编译为二进制文件rcc,在控制台执行下列命令
rcc -binary main.qrc -o main.rcc
//在应用程序中注册资源,一般在main函数启动后就注册
QResource::registerResource(qApp->applicationDirPath() + "/main.rcc");

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2174106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

欺诈文本分类检测(十七):支持分类原因训练

1. 引言 前文数据校正与增强进行了数据增强&#xff0c;本文将使用增强后的数据对模型进行进一步训练&#xff0c;以便得到能同时预测出分类标签、欺诈者、分类原因多个信息的模型。 为此&#xff0c;我们需要对整个训练过程进行调整&#xff0c;包括&#xff1a; 交叉训练逻…

苹果端侧AI布局深度分析

苹果 - 国际巨头的端侧 AI布局 深度分析 1.1.1 苹果AI&#xff1a;模型侧&#xff1a;MM1 3月&#xff0c;苹果发布多模态大模型MM1&#xff0c;拥有高达300亿参数。MM1融合密集模型与MoE变体&#xff0c;涵盖300亿、70亿、30亿参数版。MM1预训练指标领先&#xff0c;在多个多…

ubuntu 安装k8s

#关闭 Swap 内存&#xff0c;配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…

基于SpringBoot+Vue的高校实习管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

一次眼睛受损然后恢复的过程

由于多年没有社交比较宅,多年长期盯着电脑和手机,没有保护好眼睛 之前早上醒来有一段时间我眼睛老是分泌各种乱起八遭的东西,导致我眼睛看不清, 2023年3月有天的早上,我又不小心眼睛揉出血了,出门上班路上的时候才知道有这个问题,第二天早上就挂了去了眼科,医生给我开了如下的药…

单细胞转录组|scATAC-seq 数据整合

引言 本文在此展示了如何将多个源自人类外周血单核细胞的单细胞染色质数据集进行整合。其中一个数据集是通过10x Genomics的多组学技术获得的&#xff0c;它涵盖了每个细胞的DNA可及性和基因表达数据。另一个数据集则是通过10x Genomics的单细胞ATAC测序(scATAC-seq)技术得到的…

Mybatis-Plus自动填充时间的配置类

引言&#xff1a;在现代软件开发中&#xff0c;数据库操作是不可或缺的一部分。为了确保数据的准确性和完整性&#xff0c;我们常常需要在数据库记录中添加时间戳&#xff0c;例如创建时间和更新时间。MyBatis-Plus作为一个流行的持久层框架&#xff0c;提供了灵活的机制来实现…

官方权威解读|CNAS-CL01计量溯源性部分解读,供CNAS软件测试实验室参考

CNAS-CL01《检测和校准实验室能力认可准则》是软件测试实验室申请CNAS资质&#xff0c;建设符合CNAS要求的实验室质量管理体系时必须要参考的一部强制性准则。CNAS-CL01一共分为五大核心部分&#xff1a;通用要求、结构要求、资源要求、过程要求和管理体系要求。前面的文章中我…

【零散技术】微信支付保姆教程(一)

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 微信支付十余年&#xff0c;早已成为国内必不可少的支付工具。但是开发对接中 繁杂的各类参数与文档&#xff0c;以及各种证书的申请&#xff0c;着实也成了不少开发者的噩梦&#xff0c;那么今天我们来看看&#xff0c;如何申…

3-3 AUTOSAR RTE 对SR Port的作用

返回总目录->返回总目录<- 一、前言 RTE作为SWC和BSW之间的通信机构,支持Sender-Receiver方式实现ECU内及ECU间的通信。 对于Sender-Receiver Port支持三种模式: 显式访问:若运行实体采用显示模式的S/R通信方式,数据读写是即时的;隐式访问:当多个运行实体需要读取…

小阿轩yx-案例:代码管理系统简介与部署

小阿轩yx-案例&#xff1a;代码管理系统简介与部署 前言 开发一个项目时&#xff0c;如果只有几十行代码或几百行代码时维护还算简单&#xff0c;但是代码数量达到一定程度或两三个人共同开发一个项目时&#xff0c;就很容易会出现代码混乱、冲突、排错难等问题。代码编写完成…

vue3中< keep-alive >页面实现缓存及遇到的问题

vue3中< keep-alive >页面实现缓存及遇到的问题 实现原理&#xff1a;keep-alive 是 Vue 的内置组件&#xff0c;当它包裹动态组件时&#xff0c;会缓存不活动的组件实例&#xff0c;而不是销毁它们。实现不同路由是否缓存只需要设置对应路由参数keepAlive为true&#xf…

Excel里的 $ 是什么意思,绝对引用用法详解来了

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f511; 在Excel中&#xff0c;$符号是一个功能强大的工具&#xff0c;它用于实现单元格引用的绝对引用和混合引用。了解它的用法对于编写公式和处理数据至关重要。今天&#xff0c;我们将详细介绍$符号的用法和一些实…

【C++】设计用户级缓冲区

目录 缓冲区功能分析 缓冲区空间分配策略分析 数据设计和函数介绍 完整代码 接口介绍 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 缓冲区功能分析 1.可以向缓冲区写入数据 2.可用从缓冲区读取数据 3.可用窥探数据——把数据拷贝给上层&#xff0c;但缓冲区数据不减少 …

巧用枚举消除条件判断

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 在上一篇的文章结合HashMap与Java 8的Function和Optional消除ifelse判断中有讲到如何结合HashMap与Java 8的Function和Optional消除ifelse判断&#xff…

校园二手交易平台的小程序+ssm(lw+演示+源码+运行)

摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

Transformer: Attention is all you need

Transformer于2017年提出&#xff0c;最开始应用于NLP领域&#xff0c;随着Transformer的快速发展&#xff0c;在视觉领域中也越来越多的论文或应用用到了Transformer&#xff0c;这里记录一下自己学习的一些知识点。 PDF&#xff1a; 《Attention Is All You Need》 Code: att…

【HTML5】html5开篇基础(3)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

带您了解《人工智能机器视觉应用工程师》

人工智能机器视觉应用是指利用人工智能技术和机器视觉技术相结合&#xff0c;使机器能够像人类一样通过视觉感知和理解环境&#xff0c;从而实现各种应用。随着人工智能技术的不断发展&#xff0c;机器视觉应用在各个领域得到了广泛应用。 在工业制造领域&#xff0c;人工智能机…

Unity3D入门(三) : Android和Unity3D交互 - Android调用Unity

1. 前言 上篇文章&#xff0c;我们讲了如何在Unity3D中过渡地切换相机视角。这篇文章&#xff0c;我们来讲一下Unity3D怎么与Android交互。 1.1 unity和Android的三种通信方式 Unity官方提供的接口 : 有一个弊端&#xff0c;它有一个传输内容量的一个限制&#xff0c;传输内…