当前位置: 首页 > news >正文

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

继续讲一些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.mrgr.cn/news/38297.html

相关文章:

  • C++11标准模板(STL)- 常用数学函数 - 计算一个数的给定次幂 (xy)(std::pow, std::powf, std::powl)
  • k8s搭建一主三从的mysql8集群---无坑
  • C++ 数据结构算法细节相关
  • 前端测试最强教程 - 实现 fake http 和 fake db
  • 如果你不愿意冒一切风险,就不要成为创业者:如何建立一个年收入 1800 万美元的支付业务
  • Jmeter压测数据库
  • EDA设计:原理、应用与代码实践
  • 2. PH47代码框架二次开发功能特性
  • YOLOv8最新改进2023 CVPR 结合BiFormer
  • 2024淘宝双11活动,收下这份必买好物推荐清单
  • Spring Boot 基础入门指南
  • vector的模拟实现以及oj题(2)
  • SAP员工士气因重组受到打击
  • Android SQLite的基本使用、生成Excel文件保存到本地
  • 面试加分必看,11道接口安全测试面试题!
  • AI跟踪报道第58期-新加坡内哥谈技术-本周AI新闻: OpenAI动荡时刻和Meta从未如此动人
  • 二分查找(2)
  • 耳机检测系统源码分享
  • 手把手教你用PyTorch从零训练自己的大模型(非常详细)零基础入门到精通,收藏这一篇就够了
  • OIDC6-OIDC 授权流程类型