作者 主題: [Qt5] QString::arg() 格式化字串  (閱讀 6713 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
[Qt5] QString::arg() 格式化字串
« 於: 2016-05-03 13:03 »
參考: 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