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

【Qt】QTime::toString(“hh:mm:ss.zzz“) 显示乱码的原因与解决方案

在使用 Qt 编写计时器程序时,我遇到一个很奇怪的问题:使用 QTime::toString("hh:mm:ss.zzz") 格式化时间后,显示出来的是一串乱码,如下所示:

本来应该是:

但却显示了一堆“〇”或奇怪的符号。

问题表现

在界面上用 QLabelQTextEdit 显示时间字符串时,代码如下:

ui->showTime->setText(time.toString("hh:mm:ss.zzz"));

然而运行后,显示为全角符号或乱码:〇〇:〇〇:〇〈.〈『〇

原因分析

这是因为 toString("hh:mm:ss.zzz") 返回的字符串虽然是正常的数字格式,但Qt 的控件默认字体设置或语言环境不正确,导致它无法正常显示 ASCII 数字和标点符号,而退回到了全角字符或替代字符(如“〇”、“〈”、“『”等)来渲染。

特别是中文环境下,某些系统字体(例如仿宋、楷体)默认不支持半角英文数字,会强制显示全角字符。

解决方案(如果大家有什么好的解决方法可以评论区留言)

不要直接使用 time.toString() 输出格式化时间,而是使用 QString::arg 手动拼接字符串,确保每一段都是纯 ASCII 字符,并设置控件字体为标准字体。

QString text = QString("%1:%2:%3.%4").arg(time.hour(), 2, 10, QChar('0')).arg(time.minute(), 2, 10, QChar('0')).arg(time.second(), 2, 10, QChar('0')).arg(time.msec(), 3, 10, QChar('0'));ui->showTime->setText(text);

这样拼接出来的时间字符串是:00:01:23.045  绝对不会出现乱码问题。  

结合打点记录功能

如果你有一个“标记”按钮,记录时间点,可以这样写:

static int i = 0;
i++;
QString text = QString("第%1次打点:%2:%3:%4.%5").arg(i).arg(time.hour(), 2, 10, QChar('0')).arg(time.minute(), 2, 10, QChar('0')).arg(time.second(), 2, 10, QChar('0')).arg(time.msec(), 3, 10, QChar('0'));ui->bitTime->append(text);

总结

项目内容
问题类型Qt 显示乱码
关键词QTime::toString、乱码、“〇〇”
解决方式使用 QString::arg 拼接格式化时间字符串
推荐字体Arial、微软雅黑(Microsoft YaHei)
http://www.lryc.cn/news/605336.html

相关文章:

  • OpenWrt Network configuration
  • SpringBoot 2.7.18 升级 3.4.6
  • LLMs之Agent:GLM-4.5的简介、安装和使用方法、案例应用之详细攻略
  • Python基础--Day04--流程控制语句
  • html的onBlur
  • 洛谷刷题7.30
  • 外键列索引优化:加速JOIN查询的关键
  • 【Arch-Linux,hyprland】常用配置-已实验成功指令大全(自用)(持续更新)
  • IBM Watsonx BI:AI赋能的下一代商业智能平台
  • 2.3.1-2.3.5获取资源-建设团队- 管理团队-实施采购-指导
  • Effective C++ 条款11:在operator=中处理“自我赋值”
  • ros2 launch文件编写详解
  • Python 程序设计讲义(46):组合数据类型——集合类型:集合间运算
  • 【百卷编程】Go语言大厂高级面试题集
  • 如何修改VM虚拟机中的ip
  • 2024 年 NOI 最后一题题解
  • 《汇编语言:基于X86处理器》第10章 复习题和练习
  • 歌尔微报考港交所上市:业绩稳增显韧性,创新引领生态发展
  • S3、SFTP、FTP、FTPS 协议的概念、对比与应用场景
  • openwrt中br-lan,eth0,eth0.1,eth0.2
  • 第2章 cmd命令基础:常用基础命令(3)
  • cmake_parse_arguments()构建清晰灵活的 CMake 函数接口
  • G9打卡——ACGAN
  • 获取TensorRT引擎文件(.engine)版本号的几种方法
  • 2022 年 NOI 最后一题题解
  • 数据集相关类代码回顾理解 | DataLoader\datasets.xxx
  • 【高等数学】第七章 微分方程——第四节 一阶线性微分方程
  • 【支持Ubuntu22】Ambari3.0.0+Bigtop3.2.0——Step4—时间同步(Chrony)
  • Spark的宽窄依赖
  • 《设计模式之禅》笔记摘录 - 11.策略模式