首先声明,个人不认为这是一个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.
注意这儿提到了两点:
首先:用"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")
分享到:
相关推荐
VS调试QT类中的QString无法查看到变量值时,进行相关的配置即可实现变量值的查看: 下载**qt5.natvis**放置到路径: > Microsoft\VS2017\Enterprise\Common7\Packages\Debugger\Visualizers
在Qt库中,`QString`类是用于处理文本字符串的核心组件。它提供了丰富的函数和方法,使得对字符串的处理变得非常方便。今天我们要探讨的是`QString`中的`split()`函数,这个函数允许我们将一个字符串分割成多个部分...
然而,在Qt框架中,我们通常使用QString类来处理字符串。当Qt代码需要与非Qt的Windows API交互时,如调用WinAPI函数,就需要将QString转换成TCHAR*。本文将详细讲解如何有效地进行这种转换,并确保编译运行通过。 ...
此为QString无损转char*和unsigned char* 。 当QString内容包含汉字时,转换char*等会发生...使用后char*与unsigned char*的qDebug()输出与QString输出结果相同。 注意,该函数返回unsigned char*使用完毕后记得delete。
在 QT 框架中,QString 是一个非常重要的类,它提供了许多有用的函数来处理字符串。其中,section 函数是一个非常有用的函数,它可以将一个字符串分割成多个部分,并返回指定的部分。 section 函数有多个重载版本,...
在VS2010中调试QString等Qt类型的时候不能显示值是不是很坑爹,这个就是为了解决此问题的工具文件,该文件包含了VS中的MFC支持,和Qt类型的支持,还增加包含了网上没有的QDateTime等的支持,将下载的文件放到 ...
一、QString赋值给char* 例如: QString qstr; char *str = qstr.toLatin1().data();//这样便把qstr中的值传给了str 二 、char [] 赋值给string char str[32]; string str2(str);//这样便把str中的值传给...
比如,`QString::arg`是一个非常有用的方法,用于格式化字符串,类似于C++的`printf`格式化,但更安全。 ```cpp QString greeting = "Hello, %1!"; QString name = "World"; greeting.arg(name); // greeting...
在编程领域,尤其是在使用Qt框架进行开发时,`QStrings`是经常被提及的一个关键概念。`QStrings`是Qt库中的一个核心组件,它提供了一种高效且方便的方式来处理和操作字符串。在这个名为"QStrings 快速字符串处理单元...
在QT编程环境中,QString是一个非常重要的类,它用于处理文本数据。这个类提供了丰富的功能,如字符串操作、格式化和转换。在某些情况下,我们可能需要将QString对象转换为ASCII值,这通常是为了进行底层的数据处理...
在使用Microsoft Visual Studio 2017(VS2017)进行QT应用程序开发时,有时我们需要深入调试代码,特别是涉及到QT类,如QString。在调试过程中,正确地查看和理解QString变量的值是非常重要的。`S调试QT类中的...
QString是Qt库提供的一种字符串类,它提供了丰富的字符串操作功能,并且支持多种编码格式,包括ASCII。 题目中提到的"QString转ASCII",实际上是一个从QString对象中提取ASCII字符的过程。QString内部可以存储UTF-8...
在IT行业中,QString是Qt库中的一个核心类,专门用于处理文本数据,尤其在C++编程环境下被广泛使用。这个“testQString2.zip”压缩包很可能包含与使用QString相关的示例代码、教程或者测试项目,旨在帮助开发者了解...
Qt是一个著名的C++库...使用Qt,在一定程序上你获得的是一个“一站式”的 服务:不再需要研究STL,不再需要C++的<string>,因为Qt有它自己的QString等等。或许这样说很偏激,但Qt确实是一个 “伟大的C++库”。
在IT行业中,尤其是在软件开发领域,`QString`是一个至关重要的概念,特别是在使用Qt库进行C++编程时。`QString`是Qt框架下提供的一种用于处理文本字符串的类,它提供了丰富的功能,使得在处理字符串时既高效又方便...
Qt基础开发之QString与QByteArray详细用法与区别及QString QByteArray互转 Qt基础开发中的QString与QByteArray是两个非常重要的类,它们都可以用来处理字符串或字节流,但是它们之间有着很大的区别。 首先,...
QT中的QStringList是一个非常实用的数据结构,用于存储和操作字符串序列。它提供了丰富的API来满足各种字符串处理需求。以下是对标题和描述中提及的QStringList关键功能的详细说明: 1. **添加字符串**: 使用`...
QTQStringList是Qt库中一个非常实用的数据结构,它继承自QList<QString>,专用于存储和操作字符串列表。在Qt编程中,QStringList提供了多种高效的方法来处理字符串集合,包括添加、删除、查找、替换、合并和拆分等...
在编程领域,字符串处理是不可或缺的一部分,而`QStrings.pas`文件正是针对这一主题的一个重要组件。它主要用于Delphi或Free Pascal等基于Pascal语言的开发环境中,提供了高效且强大的字符串操作功能。`QStrings.pas...