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>這樣的內容,後一個就不受限制了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章