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

QString如何格式化字符串

在Qt中,QString类提供了多种方式来格式化字符串。这包括使用arg()方法、sprintf()风格的格式化(通过QString::asprintf()QString::number()等辅助函数),以及从Qt 5.10开始引入的C++11风格的格式化(虽然Qt核心库本身并不直接支持C++20的std::format,但你可以使用第三方库或自己实现类似的功能)。不过,最常用的方法之一是使用arg()方法。

使用arg()方法

arg()方法允许你插入数字、字符串等类型的值到占位符位置。占位符由%1%2等表示,其中数字表示参数的索引(从1开始)。

QString name = "Alice";
int age = 30;
QString greeting = QString("Hello, %1. You are %2 years old.").arg(name).arg(age);
// 或者链式调用:
// QString greeting = QString("Hello, %1. You are %2 years old.").arg(name).arg(age);qDebug() << greeting;  // 输出:Hello, Alice. You are 30 years old.

使用QString::asprintf()(不推荐,但存在)

虽然Qt文档通常不推荐使用QString::asprintf()(因为它不是Qt官方API的一部分,且可能在未来的Qt版本中消失),但它提供了一种类似C语言sprintf()函数的格式化方式。然而,更推荐使用Qt自己的格式化方法,如arg()QString::number()

使用QString::number()

虽然QString::number()不是直接用于格式化整个字符串,但它对于将数字转换为字符串并格式化数字(如指定小数点后的位数)非常有用,然后可以将这些字符串与其他字符串部分组合。

int number = 123;
QString formattedNumber = QString("%1").arg(QString::number(number, 10));  // 转换为十进制字符串
// 或者更直接地,但如果你想格式化数字(如添加填充、指定基数等),则可能需要结合使用// 格式化浮点数
double pi = 3.14159;
QString piString = QString::number(pi, 'f', 2);  // 保留两位小数

使用C++20的std::format(需要Qt之外的支持)

虽然Qt本身不直接支持C++20的std::format,但你可以在你的Qt项目中包含并使用支持该特性的第三方库,如{fmt}库。{fmt}是一个现代、类型安全的C++格式化库,它提供了类似于Python的字符串格式化功能。

#include <fmt/core.h>QString name = "Alice";
int age = 30;
QString greeting = QString::fromStdString(fmt::format("Hello, {}. You are {} years old.", name, age));qDebug() << greeting;  // 输出:Hello, Alice. You are 30 years old.

注意:使用QString::fromStdString()std::string转换为QString

总的来说,对于Qt项目中的字符串格式化,推荐使用arg()方法,因为它简单、直观,并且与Qt的API紧密集成。如果你需要更复杂的格式化功能,并且不介意在项目中包含额外的依赖,那么{fmt}库是一个很好的选择。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Elasticsearch集群架构
  • 人工智能造福公众:未来一片光明
  • 零基础 Tomcat 环境搭建(图解)
  • 大数据系列之:查看Centos服务器系统日志,排查应用进程oom情况,查看进程堆内存信息,查看进程启动参数设置
  • 自定义事件分发
  • Linux(驱动中) 时间管理和内核定时器(学习总结)
  • Ollama—87.4k star 的开源大模型服务框架!!
  • Linux驱动.之驱动开发思维,设备,驱动,总线分析思想,驱动的分类(字符设备,块设备,网络设备)
  • 降低安全违规行为发生率,节省人工监管成本的智慧园区开源了
  • iOS面试:如何手动触发一个value的KVO?
  • Qt-桌面服务和托盘
  • GPU环境配置:1.CUDA、Anaconda、Pytorch
  • 备份还原 本地所有的Docker 镜像并且在另一台机器上还原
  • bios中启动模式uefi是什么意思_uefi相关知识史上最全介绍
  • 超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)
  • [译]如何构建服务器端web组件,为何要构建?
  • canvas 五子棋游戏
  • css布局,左右固定中间自适应实现
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 看域名解析域名安全对SEO的影响
  • 蓝海存储开关机注意事项总结
  • 聊聊redis的数据结构的应用
  • 如何合理的规划jvm性能调优
  • 时间复杂度与空间复杂度分析
  • 使用Gradle第一次构建Java程序
  • 手写一个CommonJS打包工具(一)
  • 算法之不定期更新(一)(2018-04-12)
  • 写给高年级小学生看的《Bash 指南》
  • ​比特币大跌的 2 个原因
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • %@ page import=%的用法
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (web自动化测试+python)1
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (算法)硬币问题
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET Standard 的管理策略
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET4.0并行计算技术基础(1)
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET开发者必备的11款免费工具
  • .NET中winform传递参数至Url并获得返回值或文件
  • .NET中分布式服务
  • .project文件