Qt报错 QString::arg: Argument missing(转)

转自https://www.jianshu.com/p/4b884a997009

 

以下代码出现错误QString::arg: Argument missing

QString sxy=QString("(x=%1y=%2)").arg(pt.x).arg(pt.y);
sNum = sNum + sxy.toStdString() + "(" + sName + ")";
sMacPos=QString("%1,%1").arg(pt.x).arg(pt.y).toStdString();//20191130

 

 

工作中我们一般会大量使用到QString的arg来进行字符串的拼接,因为使用起来确实比较直观方便,但是当你链式使用arg时(即 .arg(xxx).arg(xxx).arg(xxx)....这样的形式),一定要小心,要确保arg的参数内容没有形如%<1-99>这样的内容。

因为一旦有这样的内容,后续arg就会把这些内容进行错误的替换(除非这是你想要的效果)。
很多时候,像url、路径、文件名这些都会可能出现这样形式的内容,尤其是url,进行了urlencode的链接就很可能有这种。

为了避免出现这种不必要的错误,虽然我们可以选择用QTextStrem或QString::asprintf来替代arg进行字符串拼接的工作,但是这两种方式都没有arg那么好用。
既然要用arg的话,那么我们就尽量避免链式调用arg,转而使用arg的多参数重载方法,重载版本有可以支持从1个QString直到9个QString的参数。
使用这种多参数的版本,我们所有的参数都会一次给到arg进行拼接,就不会出现链式调用的那种问题了。

如果拼接的参数多于9个呢,这时候可以变通一点,拆分成两个arg的链式调用,第一个arg的调用参数要确保为不会出现%<1-99>这样的内容,后一个就不受限制了。

 

你可能感兴趣的:(Qt报错 QString::arg: Argument missing(转))