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

继续讲一些Qt开发中的技巧操作:

1.自带对话框的美化

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

cpp 复制代码
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文件,这样就将资源文件单独出来了,可在需要的时候动态加载。

cpp 复制代码
//Qt中使用二进制资源文件方法如下
//将qrc编译为二进制文件rcc,在控制台执行下列命令
rcc -binary main.qrc -o main.rcc
//在应用程序中注册资源,一般在main函数启动后就注册
QResource::registerResource(qApp->applicationDirPath() + "/main.rcc");
相关推荐
神秘的t6 分钟前
Spring Web MVC————入门(2)
java·spring·mvc
小龙Guo12 分钟前
QT+opencv实现卡尺工具找圆、拟合圆
开发语言·qt·opencv
右璇15 分钟前
ORACLE查看归档是否打开
数据库·oracle
开开心心就好15 分钟前
高效全能PDF工具,支持OCR识别
java·前端·python·pdf·ocr·maven·jetty
冷心笑看丽美人16 分钟前
Spring MVC数据绑定和响应 你了解多少?
java·spring·mvc
XQ丶YTY23 分钟前
大二java第一面小厂(挂)
java·开发语言·笔记·学习·面试
天空之城夢主35 分钟前
shell 编程之正则表达式与文本处理器
数据库·mysql·正则表达式
Always_away36 分钟前
数据库系统概论|第七章:数据库设计—课程笔记
数据库·笔记·sql·学习
一零贰肆40 分钟前
深入理解SpringBoot中的SpringCache缓存技术
java·springboot·springcache·缓存技术