1. 程式人生 > >QT學習之QString的arg方法

QT學習之QString的arg方法

QT中QString類似於C的printf中的格式輸出符。

1 使用arg(str1,str2,str3)

這種方法要求str1、str2、str3都為const QString &型別,即:

QString QString::arg(const QString & a1, const QString & a2, const QString & a3) const

同時,arg( )裡的引數實現從1個到9個,也就是說最多隻能有9個!即在實現中,arg的定義中引數最多的為:

QString QString::arg(const QString & a1, const
QString & a2, const QString & a3, const QString & a4, const QString & a5, const QString & a6, const QString & a7, const QString & a8, const QString & a9) const

這也就意味著,如果有如下程式碼:

QString str = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11").
            arg("1","2","3"
,"4","5","6","7","8","9")

str將只會輸出:

"1 2 3 4 5 6 7 8 9 %10 %11"

解決方法為在後面再加一個arg方法,放上後面兩個對應的引數:

QString str = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11").
            arg("1","2","3","4","w","6","7","8","9").arg("a","b");
//輸出為:
// "1 2 3 4 5 6 7 8 9 a b"

注意:在QT5幫助文件中,給出瞭如下程式碼:

QString str;
str = "%1
%2"
; str.arg("%1f", "Hello"); // returns "%1f Hello" str.arg("%1f").arg("Hello"); // returns "Hellof %2"

如果你copy這個程式碼去測試一下,會發現,輸出結果還是:”%1 %2” 。根本沒有其給出的結果。(沒找到原始碼,有誰知道怎麼檢視QT的原始碼,求幫助!說找src資料夾的就不要來了,根本木有)

所以在使用的時候一定要注意一下。要緊跟字串使用arg( ) 。

2 使用arg(str1).arg(str2).arg(str3)

QString str=QString("%1 %2 %3 %4").arg("A").arg("B").arg("C").arg("D");
//str=="A B C D"

簡單說就是挨著替換唄。但請注意下面的形式:

str = QString("%1 %2").arg("%1World", "Hello");
qDebug()<<str;
//輸出為:"%1World Hello"

str = QString("%1 %2").arg("%1World").arg("Hello");
qDebug()<<str;
//輸出為:"HelloWorld %2"
//第一個arg執行完後變為:QString("%1World %2").arg("Hello")
//再次執行後"Hello"替換的為%1

所以在使用多個arg( )連線時,一定要注意,前面連線使用的arg( )裡如果有“%+數字”的情況,後面的arg( )會同樣替換!
請注意如下案例:

str = QString("%1 %2").arg("%1World").arg("Hello");
//輸出:"HelloWorld %2"
str = QString("%1 %2").arg("%2World").arg("Hello");
//輸出:"HelloWorld Hello"
str = QString("%1 %2").arg("%3World").arg("Hello");
//輸出:"%3World Hello"
str = QString("%1 %2").arg("%8World").arg("Hello");
//輸出:"%8World Hello"
str = QString("%1 %6").arg("%3World").arg("Hello");
//輸出:"HelloWorld %6"
str = QString("%2 %6").arg("%3World").arg("Hello");
//輸出:"HelloWorld %6"
str = QString("%0 %6").arg("%3World").arg("Hello");
//輸出:"HelloWorld %6"
str = QString("%-1 %6").arg("%3World").arg("Hello");
//輸出:"%-1 HelloWorld"

arg( )裡的引數在進行替換時,只會按照數字從小到大的順序進行替換,只有比當前數字小的所有數字都替換完成了,才會替換當前數字,否則將當前數字和%按字串處理。且數字為自然數!

3 使用arg(int, int, int)

QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char( ' ' )) const

a:表示要處理的數字;fieldWidth:字寬;base:數字基數

str = QString("十進位制 63 的十進位制為 %1")
            .arg(63, 0, 10);
//輸出:"十進位制 63 的十進位制為 63"
str = QString("十進位制 63 的十六進位制為 %1")
            .arg(63, 0, 16);
//輸出:"十進位制 63 的十六進位制為 3f"
str = QString("%1 %L2 %L3")
            .arg(12345)
            .arg(1987654321)  //根據結果,可知道這個L的作用
            .arg(12345, 0, 8); //但使用這種方式時,L失效
//輸出為:12345 1,987,654,321 30071
//這裡%L3的L沒有任何作用