參考:
http://doc.qt.io/qt-5/qstring.htmlarg() 參數除了『字串』類型最多可用9個(大於9個 編譯錯誤)外,其他類型每次只能用一個
std::cout << QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10")
.arg("a", "b", "c", "d", "e", "f", "g", "h", "i", "j").toStdString() << std::endl;
(clang)
error: no matching member function for call to 'arg'
第10個要另外再用一個 arg()
std::cout << QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10")
.arg("a", "b", "c", "d", "e", "f", "g", "h", "i")
.arg("j").toStdString() << std::endl;
這樣就可以編譯過了
output:
a b c d e f g h i j
---
不同型別的參數不能放在同一個 arg(),
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315, 6, 16).toStdString() << std::endl;
第2個 arg(315, 6, 16) 會以為是有3個要輸出的整數,其實是誤會,參考官網函數原型就知道
如果第一個參數是整數類型,也就是說要輸出的是整數,第2個參數是『欄位寬度』,
第3個參數則是『進位』制,所以上面這行程式碼實際輸出是這樣
output:
abc def 13b %4 %5
315 會轉換成16進位制,輸出時數值本身佔3個字元,所以前面補3個空白,如果不想用空白,可加第4個參數指定,像這樣
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315, 6, 16, QChar('-')).toStdString() << std::endl;
output:
abc def ---13b %4 %5
如果 6, 16 也是要做為一般整數輸出,每個整數要單獨使用一次 arg()
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315).arg(6).arg(16, 0, 16).toStdString() << std::endl;
output:
abc def 315 6 10
~/cc/qt/test1$ cat main.cc
#include <QString>
#include <iostream>
int main() {
std::cout << QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10")
.arg("a", "b", "c", "d", "e", "f", "g", "h", "i").arg("j").toStdString() << std::endl;
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315, 6, 16).toStdString() << std::endl;
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315, 6, 16, QChar('-')).toStdString() << std::endl;
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315).arg(6).arg(16, 0, 16).toStdString() << std::endl;
return 0;
}
~/cc/qt/test1$ qmake -project
~/cc/qt/test1$ qmake
~/cc/qt/test1$ make
~/cc/qt/test1$ ./test1
a b c d e f g h i j
abc def 13b %4 %5
abc def ---13b %4 %5
abc def 315 6 10