QT 整型数据转换为字符串类型

点击打开原文

首先声明,个人不认为这是一个bug(它处于reported阶段,官方也没确认它是或不是bug)。考虑到其他人可能有类似的疑问,故整理一下:

问题

QTBUG-19027 是这样一个问题:

交换两个arg的同时交换%1%2的位置,得到的结果不同

示例程序如下:

#include <QString>
#include <QDebug>

int main(int argc, char *argv[])
{   
   QString output1 = QString("%2%1").arg("0001").arg("-");
   QString output2 = QString("%1%2").arg("-").arg("0001");
   qDebug()<<output1<<output2;
   return 0;
}

结果如下:

"-001" "-0001"

这个结果很正常。我们稍候分析。但是,你有没有和他一样的疑问呢?

  • 前者为什么不是“-0001”
  • 这是bug还是feature
  • 必须按照 %1 %2 的次序么?

分析

既然用QString的成员函数 arg ,首先看Manual(我们只看重载的函数的一个)吧:

QString QString::arg ( const QString & a, int fieldWidth = 0, const QChar & fillChar = QLatin1Char( ' ' ) ) const

Returns a copy of this string with the lowest numbered place marker replaced by string a, i.e., %1, %2, ..., %99.

注意这儿提到了两点:

  • %后面的数字的范围:1-99

  • arg用它的参数取代字符串中%和最小的数字 的组合

首先:用"0001" 取代 %1

QString("%2%1").arg("0001") ==> QString("%20001")

然后,用 "-" 取代 %20

QString("%20001").arg("-") ==> QString("-001")

有疑问?为什么不是%2或%200?

  • 范围是1-99,所以不可能是200
  • 为什么不是2?自己想想下面的情况
QString("%1%2%3%4"
        ...
        "%19%20%21"
)
.arg("str1")
.arg("str2")
...
.arg("str21")

 将整型转换为字符串类型有两种方法:

1.QString QString::number ( long n, int base = 10 )   [static]

如:

long a = 10;
QString s = QString::number(a, 10);             // s = "10"
QString t = QString::number(a, 16).toUpper();     // t = "A"
2.QString s = QString("%1").arg(a);           //也就是上面提到的方法


Qt是一个跨平台的C++应用程序开发框架,提供了很多便捷的函数和类库,包括整型数组转换成字符串的函数。 要将整型数组转换成字符串,首先需要将数组中的每个整数转换成字符串,这可以通过Qt中的QString::number()函数实现。这个函数接受一个整数作为参数,并返回一个QString类型的对象,表示这个整数对应的字符串。 接下来,需要将所有的字符串拼接起来,可以使用QString的.operator+=()函数将每个字符串添加到总字符串中。最后,将总字符串转换成一个普通的C++字符串(std::string)可以使用.toStdString()函数。 以下是实现的代码示例: ```cpp #include <QCoreApplication> #include <QString> #include <iostream> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int arr[] = {1, 2, 3, 4, 5}; const int arrSize = sizeof(arr) / sizeof(int); QString str; for (int i = 0; i < arrSize; ++i) { str += QString::number(arr[i]); str += ","; } std::string stdStr = str.toStdString(); std::cout << stdStr << std::endl; return a.exec(); } ``` 这个示例程序定义了一个包含5个整数的数组,然后将每个整数转换成一个字符串,并使用逗号分隔每个字符串,最终输出的是一个字符串"1,2,3,4,5,"。需要注意的是,最后一个整数后面也有逗号。如果不需要这个逗号,可以在循环体内使用if语句判断是否是最后一个整数,如果是,就不要添加逗号。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值