Qt QString.arg()无效

1 c++ qstring qt qt4

我试图使用Qt4.8文档中给出的示例:

#include <QCoreApplication>
#include <QString>
#include <iostream>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString str;
    str = "%1 %2";

    str.arg("%1f", "Hello");        // returns "%1f Hello"
    std::cout << str.toStdString().c_str() << std::endl;

    str.arg("%1f").arg("Hello");    // returns "Hellof %2"
    std::cout << str.toStdString().c_str() << std::endl;

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

然而,这输出:

%1 %2

%1 %2

两次.我在Windows 7和Ubuntu上尝试过这个,使用QtCreator和命令行.我检查过了

QMake version 2.01a

Using Qt version 4.8.1 in /usr/lib/x86_64-linux-gnu

在Windows中:

QMake version 2.01a

Using Qt version 4.7.0 in C:\qt\4.7.0\lib

我甚至检查了我的源文件中的非ascii字符,例如"%"符号是正确的.请告诉我为什么这不起作用!

这是我正在使用的PRO文件:

QT       += core

QT       -= gui

TARGET = testarg
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)

Nik*_* C. 5

arg()函数不会修改QString(如果查看文档,这些函数都是const.)它们会返回一个新的QString,而不是保存在任何地方.如果要修改原始字符串,可以使用以下命令:

str = str.arg("%1f", "Hello");
Run Code Online (Sandbox Code Playgroud)

如果要保留原始内容,只需使用新的QString:

QString tmp = str.arg("%1f", "Hello");
Run Code Online (Sandbox Code Playgroud)