我有几个'标签',我想创建一个格式化的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])' createformatted明文(l1, l2, "123", "**","xxx");??我做错了什么?
您使用的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"
从医生:返回该字符串的副本,其中包含编号最低的位置标记替换为字符串a,即%1,%2,…, % 99。
在您的示例refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
中,您返回copy到无处。在我的例子中,refLine.append(QString("[%0] :: [%1] ++ %2").arg(v1, v2, v3));
我附加到refLine
完全构造的字符串,该字符串由arg()
处理。
注:当然,你可以做下一步(用你的旧代码):
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()
返回副本。