技術討論區 > C/C++程式設計討論區

[Qt5] QString::arg() 格式化字串

(1/1)

Yamaka:
參考: http://doc.qt.io/qt-5/qstring.html

arg() 參數除了『字串』類型最多可用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
--- 引用結尾 ---


導覽

[0] 文章列表

前往完整版本