`
tomhibolu
  • 浏览: 1407515 次
文章分类
社区版块
存档分类
最新评论

QString之arg使用一则(QTBUG19027)

 
阅读更多

首先声明,个人不认为这是一个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")

分享到:
评论

相关推荐

    VS调试QT类中的QString查看变量值-qt5.natvis.zip

    VS调试QT类中的QString无法查看到变量值时,进行相关的配置即可实现变量值的查看: 下载**qt5.natvis**放置到路径: &gt; Microsoft\VS2017\Enterprise\Common7\Packages\Debugger\Visualizers

    QString 的Split使用

    在Qt库中,`QString`类是用于处理文本字符串的核心组件。它提供了丰富的函数和方法,使得对字符串的处理变得非常方便。今天我们要探讨的是`QString`中的`split()`函数,这个函数允许我们将一个字符串分割成多个部分...

    QString转换为TCHAR*

    然而,在Qt框架中,我们通常使用QString类来处理字符串。当Qt代码需要与非Qt的Windows API交互时,如调用WinAPI函数,就需要将QString转换成TCHAR*。本文将详细讲解如何有效地进行这种转换,并确保编译运行通过。 ...

    QString含汉字时,完美转char*和unsigned char*

    此为QString无损转char*和unsigned char* 。 当QString内容包含汉字时,转换char*等会发生...使用后char*与unsigned char*的qDebug()输出与QString输出结果相同。 注意,该函数返回unsigned char*使用完毕后记得delete。

    QT中QString类中文详解

    在 QT 框架中,QString 是一个非常重要的类,它提供了许多有用的函数来处理字符串。其中,section 函数是一个非常有用的函数,它可以将一个字符串分割成多个部分,并返回指定的部分。 section 函数有多个重载版本,...

    VS2010中调试Qt QString的原生内容显示

    在VS2010中调试QString等Qt类型的时候不能显示值是不是很坑爹,这个就是为了解决此问题的工具文件,该文件包含了VS中的MFC支持,和Qt类型的支持,还增加包含了网上没有的QDateTime等的支持,将下载的文件放到 ...

    QString和char以及string之间的赋值详解

    一、QString赋值给char*  例如: QString qstr;  char *str = qstr.toLatin1().data();//这样便把qstr中的值传给了str 二 、char [] 赋值给string  char str[32];  string str2(str);//这样便把str中的值传给...

    Qt QString类 常用方法 - 风云的的博客1

    比如,`QString::arg`是一个非常有用的方法,用于格式化字符串,类似于C++的`printf`格式化,但更安全。 ```cpp QString greeting = "Hello, %1!"; QString name = "World"; greeting.arg(name); // greeting...

    QStrings 快速字符串处理单元

    在编程领域,尤其是在使用Qt框架进行开发时,`QStrings`是经常被提及的一个关键概念。`QStrings`是Qt库中的一个核心组件,它提供了一种高效且方便的方式来处理和操作字符串。在这个名为"QStrings 快速字符串处理单元...

    QString转ASCII(uint).txt

    在QT编程环境中,QString是一个非常重要的类,它用于处理文本数据。这个类提供了丰富的功能,如字符串操作、格式化和转换。在某些情况下,我们可能需要将QString对象转换为ASCII值,这通常是为了进行底层的数据处理...

    S调试QT类中的QString查看变量值-qt5.natvis.zip

    在使用Microsoft Visual Studio 2017(VS2017)进行QT应用程序开发时,有时我们需要深入调试代码,特别是涉及到QT类,如QString。在调试过程中,正确地查看和理解QString变量的值是非常重要的。`S调试QT类中的...

    QString转ASCII

    QString是Qt库提供的一种字符串类,它提供了丰富的字符串操作功能,并且支持多种编码格式,包括ASCII。 题目中提到的"QString转ASCII",实际上是一个从QString对象中提取ASCII字符的过程。QString内部可以存储UTF-8...

    testQString2.zip

    在IT行业中,QString是Qt库中的一个核心类,专门用于处理文本数据,尤其在C++编程环境下被广泛使用。这个“testQString2.zip”压缩包很可能包含与使用QString相关的示例代码、教程或者测试项目,旨在帮助开发者了解...

    inkscape.rar_QString_inkscape_inkscape qt

    Qt是一个著名的C++库...使用Qt,在一定程序上你获得的是一个“一站式”的 服务:不再需要研究STL,不再需要C++的&lt;string&gt;,因为Qt有它自己的QString等等。或许这样说很偏激,但Qt确实是一个 “伟大的C++库”。

    testQString.zip

    在IT行业中,尤其是在软件开发领域,`QString`是一个至关重要的概念,特别是在使用Qt库进行C++编程时。`QString`是Qt框架下提供的一种用于处理文本字符串的类,它提供了丰富的功能,使得在处理字符串时既高效又方便...

    Qt基础开发之QString与QByteArray详细用法与区别及QString QByteArray互转

    Qt基础开发之QString与QByteArray详细用法与区别及QString QByteArray互转 Qt基础开发中的QString与QByteArray是两个非常重要的类,它们都可以用来处理字符串或字节流,但是它们之间有着很大的区别。 首先,...

    QT QStringList 用法.docx

    QT中的QStringList是一个非常实用的数据结构,用于存储和操作字符串序列。它提供了丰富的API来满足各种字符串处理需求。以下是对标题和描述中提及的QStringList关键功能的详细说明: 1. **添加字符串**: 使用`...

    QT QStringList 用法.pdf

    QTQStringList是Qt库中一个非常实用的数据结构,它继承自QList&lt;QString&gt;,专用于存储和操作字符串列表。在Qt编程中,QStringList提供了多种高效的方法来处理字符串集合,包括添加、删除、查找、替换、合并和拆分等...

    QStrings.pas

    在编程领域,字符串处理是不可或缺的一部分,而`QStrings.pas`文件正是针对这一主题的一个重要组件。它主要用于Delphi或Free Pascal等基于Pascal语言的开发环境中,提供了高效且强大的字符串操作功能。`QStrings.pas...

Global site tag (gtag.js) - Google Analytics