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

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

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

相关文章

[Python数据可视化]Plotly Express: 地图数据可视化的魅力

在数据分析和可视化的世界中&#xff0c;地图数据可视化是一个强大而直观的工具&#xff0c;它可以帮助我们更好地理解和解释地理数据。Python 的 Plotly Express 库提供了一个简单而强大的方式来创建各种地图。本文将通过一个简单的示例&#xff0c;展示如何使用 Plotly Expre…

FastAdmin CMS 操作手册

FastAdmin CMS 操作手册 概述&#xff1a; 安装&#xff1a; 配置&#xff1a; 模板&#xff1a; 模板目录&#xff1a; 标签&#xff1a; 全局&#xff1a; 文章&#xff1a; 专题&#xff1a; 栏目&#xff1a; 公共参数&#xff1a; 单页&#xff1a; 特殊标签&#xff1a;…

macOS平台TextRank环境配置

1.安装python 2.安装numpy: pip3 install numpy 3.安装networkx: pip3 install networkx 4.安装math2: pip3 install math2 math2安装成功

npm安装时候报错certificate has expired

打开了一个很久没用的电脑&#xff0c;npm和node都装好了&#xff0c;安装包的时候一直报错 request to https://registry.npm.taobao.org/create-react-app failed, reason: certificate has expired而且先报错rollbackFailedOptional 然而npm没什么问题&#xff0c;是ssl过…

TSRPC+Cocos

TSRPC文档: https://tsrpc.cn/docs/get-started/api.html 创建 先创建一个默认的会话项目&#xff0c;找一个文件夹在控制台运行以下代码&#xff1a; npx create-tsrpc-applatest first-api --presets browser # 或者 yarn create tsrpc-app first-api --presets browser运…

【C++语言】C/C++内存管理

一、C/C内存分布 我们先来看一看C/C中有哪些区域&#xff0c;为什么C/C中区分这些区域呢&#xff1f;&#xff1f;不同的数据有不同的存储需求&#xff0c;各个区域满足不同的需求。我们有临时用的数据&#xff0c;该数据是存储在栈帧区域的&#xff1b;在一些数据结构中&#…

『功能项目』回调函数处理死亡【54】

我们打开上一篇53伤害数字UI显示的项目&#xff0c; 本章要做的事情是使用回调函数处理怪物Boss01死亡后增加主角经验值的功能&#xff0c;以及生成一个七秒的升级特效 首先增加一个技能特效重命名为PlayerUpGradeEffect 修改脚本&#xff1a;BossCtrl.cs 修改脚本&#xff1a…

【Linux系统编程】信号的保存与处理

目录 一&#xff0c;信号的保存 1-1&#xff0c;core与Term终止信号 1-2&#xff0c;进程退出与信号的关系 1-3&#xff0c;信号在内核中的表示 1-4&#xff0c;信号操作函数 二&#xff0c;信号的处理 2-1&#xff0c;信号被处理的时期 2-2&#xff0c;内核实现信号的…

zip-password-finder

1.zip-password-finder 对于传统ZIP文件密码的破解&#xff0c;采用密码匹配的方式进行实现&#xff0c;该github库的地址是&#xff1a; GitHub - agourlay/zip-password-finder: Find the password of protected ZIP files.Find the password of protected ZIP files. Cont…

整数二分算法和浮点数二分算法

整数二分算法和浮点数二分算法 二分 现实中运用到二分的就是猜数字的游戏 假如有A同学说B同学所说数的大小&#xff0c;B同学要在1~100中间猜中数字65&#xff0c;当B同学每次说的数都是范围的一半时这就算是一个二分查找的过程 二分查找的前提是这个数字序列要有单调性 基…

java--JDBC-连接池----JDBC小总结

一.连接池 1.连接池概述 目的&#xff1a;为了解决建立数据库连接耗费资源和时间很多的问题&#xff0c;提高性能。 Connection对象在JDBC使用的时候就会去创建一个对象,使用结束以后就会将这个对象给销毁了(close).每次创建和销毁对象都是耗时操作.需要使用连接池对其进行优…

类加载器详细介绍

类加载器我们要聊一个神秘而又重要的角色——Java类加载器。这家伙&#xff0c;就像是个超级英雄&#xff0c;总是在关键时刻挺身而出&#xff0c;为我们的Java程序提供强大的支持。我会尽量用简单易懂的方式来介绍它。 一 、类加载器介绍 1、类加载器是什么&#xff1f; 想象…

【python设计模式2】创建型模式1

目录 简单工厂模式 工厂方法模式 简单工厂模式 简单工厂模式不是23中设计模式中的&#xff0c;但是必须要知道。简单工厂模式不直接向客户端暴露对象创建的细节&#xff0c;而是通过一个工厂类来负责创建产品类的实例。简单工程模式的角色有&#xff1a;工厂角色、抽象产品角…

Redis(redis基础,SpringCache,SpringDataRedis)

文章目录 前言一、Redis基础1. Redis简介2. Redis下载与安装3. Redis服务启动与停止3 Redis数据类型4. Redis常用命令5. 扩展数据类型 二、在Java中操作Redis1. Spring Data Redis的使用1.1. 介绍1.2. 环境搭建1.3. 编写配置类&#xff0c;创建RedisTemplate对象1.4. 通过Redis…

Linux入门学习:git

文章目录 1. 创建仓库2. 仓库克隆3. 上传文件4. 相关问题4.1 git进程阻塞4.2 git log4.3 上传的三个步骤在做什么 本文介绍如何在Linux操作系统下简单使用git&#xff0c;对自己的代码进行云端保存。 1. 创建仓库 &#x1f539;这里演示gitee的仓库创建。 2. 仓库克隆 &…

Zookeeper 3.8.4 安装和参数解析

安装 zookeeper 之前必须先安装 JDK&#xff0c;有关Linux环境JDK可以参考我以前写的博文 1、关于Linux服务器配置java环境遇到的问题 2、Linux环境安装openJDK 3、Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境 文章目录 1. zookeeper 安装2. 参数解析 1. zookeeper …

VScode快速配置c++(菜鸟版)

1.vscode是什么 Visual Stdio Code简称VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器&#xff0c;支持几乎 主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性&#xff0c;也拥有对git的开箱即…

[乱码]确保命令行窗口与主流集成开发环境(IDE)统一采用UTF-8编码,以规避乱码问题

文章目录 一、前言二、命令行窗口修改编码为UTF-8三、Visual Studio 2022修改编码为UTF-8四、Eclipse修改编码为UTF-8五、DevCPP修改编码为UTF-8六、Sublime Text修改编码为UTF-8七、PyCharm、IDEA、VS Code及Python自带解释器修改编码为UTF-8 一、前言 在学习的征途中&#x…

如何通过 4 种方法恢复 Mac 上删除/未保存的 Excel 文件

您花了数小时在 MacBook 上处理 Excel 工作簿&#xff0c;但现在它不见了。或者&#xff0c;当您退出 Excel 文件时&#xff0c;您无意中选择了“不保存”。这是否意味着您的所有努力都白费了&#xff1f;本文系统地解释了如何在 Mac 上恢复丢失的 Excel 文件。使用我们的 4 种…

如何在Android上实现RTSP服务器

技术背景 在Android上实现RTSP服务器确实是一个不太常见的需求&#xff0c;因为Android平台主要是为客户端应用设计的。在一些内网场景下&#xff0c;我们更希望把安卓终端或开发板&#xff0c;作为一个IPC&#xff08;网络摄像机&#xff09;一样&#xff0c;对外提供个拉流的…