我有几个'标签',我想从这些标签中创建一个格式化的QString,例如:
void createFormattedPlainText(QString & refLine, const QString & v1, const QString & v2, const QString & v3)
{
refLine.clear();
refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
}
所以,我想打电话:
QString line;
createFormattedPlainText(line, "123", "**", "xxx");
但我不能,我在签名中删除了const,否则我得到了:
错误:没有匹配的调用函数 'createFormattedPlainText(QString&,const char [3],const char [2], const char [3])'createFormattedPlainText(l1,l2,“123”,“**”, “xxx”); ?? 我做错了什么?
答案 0 :(得分:1)
您使用arg()
是错误的,没有其他问题,您的功能签名是有效且正确的。
void createFormattedPlainText(QString & refLine, const QString & v1, const QString & v2, const QString & v3)
{
refLine.clear();
refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
}
int main(int argc, char *argv[])
{
QString line;
createFormattedPlainText(line, "123", "**", "xxx");
qDebug() << "line = " << line;
//...
<强>输出:强>
line = "[%0] :: [%1] ++ %2"
正确版本:
void createFormattedPlainText(QString & refLine, const QString & v1, const QString & v2, const QString & v3)
{
refLine.clear();
refLine.append(QString("[%0] :: [%1] ++ %2").arg(v1, v2, v3));//Attention here
}
int main(int argc, char *argv[])
{
QString line;
createFormattedPlainText(line, "123", "**", "xxx");
qDebug() << "line = " << line;
//...
<强>输出:强>
line = "[123] :: [**] ++ xxx"
来自doc:
返回此字符串的副本,其编号最小的位置标记 由字符串a替换,即%1,%2,...,%99。
在您的情况refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
中,您将副本返回到无处。在我的情况refLine.append(QString("[%0] :: [%1] ++ %2").arg(v1, v2, v3));
中,我附加了由refLine
处理的arg()
完全构造的字符串。
P.S。当然你可以做下一个(使用旧代码):
void createFormattedPlainText(QString & refLine, const QString & v1, const QString & v2, const QString & v3)
{
refLine.clear();
//arg() returns copy so just assign this copy to the refLine again
refLine = refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
}
但我认为这是一个糟糕的代码,我写这封只是为了告诉你arg()
返回副本。