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

news2024/9/20 12:42:18

继续讲一些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.coloradmin.cn/o/2142403.html

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

相关文章

【算法】差分思想:强大的算法技巧

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

Linux(CentOS8)服务器安装RabbitMQ

我安装了很久都没有成功, 各种问题, 每次的异常都不一样, 现将成功安装过程做个总结 安装前工作 确保已经安装了一些基础工具和组件库 下载安装包 https://www.erlang.org/patches/otp-24.3.4.5 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.15/ra…

Python热频随机森林分类器算法模型模拟

&#x1f3af;要点 研究发射测量斜率和时滞热频率表征&#xff0c;使用外推法计算三维磁场并定性比较使用基于焓的热演化环模型模拟每条线的热力学响应&#xff0c;测试低频、中频和高频热场景使用光学薄、高温、低密度等离子体的单位体积辐射功率或发射率公式等建模计算使用直…

GPU加速生物信息分析的尝试

GPU工具分类 实话实说&#xff0c;暂时只有英伟达的GPU才能实现比较方便的基因组分析集成化解决方案&#xff0c;其他卡还需要努力呀&#xff0c;或者需要商业公司或学术团体的努力开发呀&#xff01;FPGA等这种专用卡的解决方案也是有的&#xff0c;比如某测序仪厂家&#xf…

基于stm32使用ucgui+GUIBuilder开发ui实例

1 项目需求 1.1 基于Tft 触摸屏实现一个自锁按键 1.2 按键在按下后背景色需要进行变化&#xff0c;以凸显当前按键状态&#xff08;选中or 未选中&#xff09; 1.3 按键选中时对某一gpio输出低电平&#xff0c;非选中时输出高电平 2 移植 ucgui UCGUI的文件数量很大&#x…

happens-before

happens-before 一、happens-before 规则的含义 happens-before 是 Java 内存模型&#xff08;JMM&#xff09;中用于定义多线程之间操作顺序的规则集合。它规定了如果一个操作 A happens-before 另一个操作 B&#xff0c;那么 A 的结果对 B 可见&#xff0c;并且在 B 执行之…

未来最好的程序开发语言:Rust - 安装rust

安装 Rust - Rust 程序设计语言一门帮助每个人构建可靠且高效软件的语言。https://www.rust-lang.org/zh-CN/tools/install 设置下载源:

开源 AI 智能名片链动 2+1 模式 S2B2C 商城小程序与社交电商的崛起

摘要&#xff1a;本文深入探讨了社交电商迅速发展壮大的原因&#xff0c;并分析了开源 AI 智能名片链动 21 模式 S2B2C 商城小程序在社交电商中的重要作用。通过对传统电商与社交电商的对比&#xff0c;以及对各发展因素的剖析&#xff0c;阐述了该小程序如何为社交电商提供新的…

【机器学习】6 ——最大熵模型

机器学习6——最大熵模型 目录 机器学习6——最大熵模型最大熵&#xff08;maximum entropy&#xff09;模型模型模型学习&#xff08;估计参数&#xff09;模型评价应用 最大熵&#xff08;maximum entropy&#xff09;模型 选择熵最大的概率模型 熵是衡量不确定性的&#xf…

7 递归——206. 反转链表 ★

7 递归 206. 反转链表 给你单链表的头节点head,请你反转链表,并返回反转后的链表。 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 算法设计 可以充分利用原有的存储空间,通过修改指针实现单链表的就地逆置。相当于将所有的箭头反向,头指针指向原链表的尾部。…

苏州科技大学、和数联合获得国家知识产权局颁发的3项发明专利证书

近日&#xff0c;基于“苏州科技大学-和数智能软件区块链技术工程实验室”的研究成果&#xff0c;国家知识产权局正式授权了苏州科技大学、苏州和数区块链应用研究院联合申报的3项发明专利证书。 分别为&#xff1a; 一种基于双账本的物联网数据存储与共享方法 一种面向物联网…

SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(上)

框架模型 每一个客户端&#xff08;client&#xff09;都会和后端&#xff08;SpringBoot&#xff09;进行通信&#xff0c;例如如果一个用户进行登录&#xff0c;需要向后端发送username、password&#xff0c;SpringBoot可以理解为一个一直在跑的程序&#xff0c;不断对用户…

使用HTML和CSS制作网页的全面指南

目录 引言 一、理解HTML 1. 什么是HTML&#xff1f; 2. HTML文档的基本结构 3. 常用的HTML标签 4. 示例&#xff1a;创建一个简单的HTML页面 二、理解CSS 1. 什么是CSS&#xff1f; 2. CSS的使用方式 3. CSS选择器和属性 4. 常用的CSS属性 三、创建网页的步骤 1. 规…

蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)

目录 一、页面切换内容详解 1.逻辑解释 2.代码详解 code.c&#xff08;内含详细讲解&#xff09; code.h main.c 3.效果图片展示 ​编辑 二、页面选项高亮内容详解 1.逻辑解释 2.读入数据 FIRST.第一种高亮类型 code.c&#xff08;内含代码详解&#xff09; code.…

说一说Zookeeper的应用场景及其原理

一 ZooKeeper简介 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名…

【C++】深入理解引用:从基础到进阶详解

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:C: 探索C编程精髓&#xff0c;打造高效代码仓库 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、引用的概念 三、常引用&#x…

c++249多态

#include<iostream> using namespace std; class Parent { public:Parent(int a){this->a a;cout << " Parent" << a << endl;} public:virtual void print()//在子类里面可写可不写 {cout << "Parent" <<a<&l…

虚拟机centos_7 配置教程(镜像源、配置centos、静态ip地址、Finalshell远程操控使用)

文章目录 一、下载镜像源&#xff08;准备工作&#xff09;1、开源网站2、下载 二、VMware配置centos三、配置静态IP地址四、Finalshell使用1、下载Finalshell2、连接虚拟机 五、谢谢观看&#xff01; 一、下载镜像源&#xff08;准备工作&#xff09; 1、开源网站 有许多开源…

[Linux]:进程间通信(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. system V通信 前面我们所探究的通信方式都是基于管道文件的&#xff0c;而…

day22JS-npm中的部分插件使用方法

1. 静态资源目录 静态资源目录就是访问服务器的某些路劲时候&#xff0c;服务器可以吐出一个写好的指定页面。 实现思路&#xff1a; 1、先判断要找的路径是否是文件&#xff0c;如果是文件&#xff0c;就加载发给对方。 2、如果是文件夹&#xff0c;找到这个文件夹所在路径中…