Qt开发技巧(四)“tr“使用,时间类使用,Qt容器取值,类对象的删除,QPainter画家类,QString的转换,用好 QVariant类型

ops/2024/9/24 22:00:30/

继续讲一些Qt技巧操作
1.非必要不用"tr"
如果程序运行场景确定是某一固定语言,就不需要用tr,"tr"之主要针对多语种翻译的,因为tr的本意是包含英文,然后翻译到其他语言比如中文,不要滥用tr,如果没有翻译的需求,禁用tr,tr需要开销的,Qt默认会认为他需要翻译,会额外进行特殊处理。只有比如你的产品要用到不同的语言的国家地区,要实现多语种兼容,这种情况才需要使用“tr”,多语种的实现详见另一篇文章Qt多语种开发教程
2.Qt中的时间类
Qt封装的QDateTime日期时间类非常强大,可以字符串和日期时间相互转换(这是最牛逼,最方便的),也可以毫秒数和日期时间相互转换,还可以1970经过的秒数和日期时间相互转换等。

QDateTime dateTime;
QString dateTime_str = dateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
//从字符串转换为毫秒(需完整的年月日时分秒)
datetime.fromString("2024-09-10 12:07:50:541", "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch();
//从字符串转换为秒(需完整的年月日时分秒)
datetime.fromString("2024-09-10 12:07:50:541", "yyyy-MM-dd hh:mm:ss:zzz").toTime_t();
//从毫秒转换到年月日时分秒
datetime.fromMSecsSinceEpoch(1315194829218).toString("yyyy-MM-dd hh:mm:ss:zzz");
//从秒转换到年月日时分秒(若有zzz,则为000)
datetime.fromTime_t(1315193829).toString("yyyy-MM-dd hh:mm:ss[:zzz]");

3.Qt容器的取值使用
在我们使用QList、QStringList、QByteArray等链表或者数组的过程中,如果只需要取值,而不是赋值,强烈建议使用 at() ,而不是 [] 操作符。一方面使用 at() 效率高于使用 [] 操作符速度,另一方面Qt的容器类[] 操作符可作为右值也能作为左值,他自己不能辨别 ,假设最坏的情况出现并且强制执行深度赋值,而 at() 函数只能作为右值,不允许出现在一个赋值的左边,会帮助你避免这种错误。
4.QDialog窗体的阻塞
如果你某个子窗体是QDialog类型的窗体,你想要在exec以后还能让其他代码继续执行,请在QDialog窗体exec前增加一行代码,否则会阻塞窗体消息.

QDialog myDlg;
//这里加一行避免阻塞窗体消息
myDlg.setWindowModality(Qt::WindowModal);
myDlg.exec();

5.Qt控件类对象的删除
在Qt中,安全的删除Qt的窗体呀控件呀等对象,强烈建议使用deleteLater而不是delete,因为deleteLater会选择在合适的时机进行释放,而delete会立即释放,很可能会出错崩溃(我试过只要调用到delete就直接崩溃)。如果要批量删除对象集合,可以用qDeleteAll,比如 qDeleteAll(btns);

    ui->btBack->deleteLater();ui->labelRemindImg->deleteLater();ui->cbDetectRemind->deleteLater();

6.玩转QPainter画家类
如果想要做好自定义控件绘制,最好研究下编程中的坐标系,心中有坐标,才能不会乱。同时将qpainter.h头文件中,QPainter类提供的函数接口好好看一遍、试以下,这里几乎包含了所有Qt内置的绘制的接口,如果你能把这些接口用的都很溜。那你界面绘制这块基本就大神了。
很多绘制相关的,这里随便截了一点
7.QString的转换
Qt中,我们经常需要将QString和const char *之间进行转换,尤其是一些传统C++做的库,转换很频繁,这时候最好用toStdString().c_str()而不是toLocal8Bit().constData(),比如在setProperty中如果用后者,字符串中的英文正常,中文就会乱码。
8.用好 QVariant类型
QVariant类型异常的强大,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用,可以说是万能的类型,在进行配置文件的存储的时候,经常会用到QVariant的转换,QVariant默认自带了toString、toFloat等各种转换,基本可以满足各种数值类型的转换兼容。
QVariant提供的各种转换接口,这里只截取冰山一角
但是有时候需要从QVariant转到一些特殊的类型,比如QColor,QFont等,却没有提供直接可用的toColor函数,这个时候就要用到特殊方法:

if (variant.typeName() == "QColor")
{QColor color = variant.value<QColor>();QFont font = variant.value<QFont>();QString nodeValue = color.name(QColor::HexArgb);
}

http://www.ppmy.cn/ops/115486.html

相关文章

el-upload如何自定展示上传的文件

Element UI 中&#xff0c;el-upload 组件支持通过插槽&#xff08;slot&#xff09;来自定义文件列表的展示方式。这通常是通过 file-list 插槽来实现的。下面是一个使用 el-upload 组件并通过 file-list 插槽来自定义文件列表展示的完整示例代码。 在这个示例中&#xff0c;…

2017年国赛高教杯数学建模C题颜色与物质浓度辨识解题全过程文档及程序

2017年国赛高教杯数学建模 C题 颜色与物质浓度辨识 比色法是目前常用的一种检测物质浓度的方法&#xff0c;即把待测物质制备成溶液后滴在特定的白色试纸表面&#xff0c;等其充分反应以后获得一张有颜色的试纸&#xff0c;再把该颜色试纸与一个标准比色卡进行对比&#xff0c…

牛客小白月赛101(A~E)

文章目录 写在前面A tb的区间问题思路code B tb的字符串问题思路code C tb的路径问题思路code D tb的平方问题思路code E tb的数数问题思路code 牛客小白月赛101 写在前面 最近几天没怎么刷题&#xff0c;昨天晚上打的这场牛客月赛打的很烂&#xff0c;隔几天不刷题感觉自己的…

把设计模式用起来!(4) 用不好模式?之原理不明

&#xff08;清华大学出版社 《把设计模式用起来》书稿试读&#xff09; 上一篇&#xff1a;把设计模式用起来&#xff01;&#xff08;3&#xff09;用不好模式&#xff1f;之时机不对 为什么用不好设计模式&#xff1f;——原理不明 难搞的顾客&#xff1a;“抹这种霜&#…

Elasticsearch:检索增强生成背后的重要思想

作者&#xff1a;来自 Elastic Jessica L. Moszkowicz 星期天晚上 10 点&#xff0c;我九年级的女儿哭着冲进我的房间。她说她对代数一无所知&#xff0c;注定要失败。我进入超级妈妈模式&#xff0c;却发现我一点高中数学知识都不记得了。于是&#xff0c;我做了任何一位超级妈…

第十四届蓝桥杯嵌入式国赛

一. 前言 本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目&#xff0c;包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题&#xff0c;可去 蓝桥云课 上搜索历届真题即可。 二. 题目概述 …

Nordic软件二[蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题][BSP代码模块修改管脚和相关机制]

蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题 本文摘录于&#xff1a;https://blog.csdn.net/chengbaojin/article/details/103778150只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 先参考上面的文章做如下修改: …

网络:TCP协议-报头字段

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 文章目录 前言一、TCP协议格式16位源端口号 和 16位目的端口号4位首部长度16位窗口大小32位序号 和 32位确认序号6种标记位 和 16位紧急指针 总结 前言 本文是我对于TCP协…