我试图使用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)
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)