QT學習之QString的arg方法


在QT的QString中,arg方法類似於C中的printf中使用的格式輸出符(只是有點類似)。

在QT5的幫助文檔中,可以看出以下幾點:

  1. 使用arg(str1, str2, str3)這種方法進行替換。

  2. 使用arg(str1).arg(str2).arg(str3)這種方法進行替換。

  3. 使用arg(int, int, int)這種方式進行替換。

解釋以下兩種方法:

一:使用arg(str1, str2, str3)

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

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

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

1
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

這也就意味着,如果有如下代碼:

1
2
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
"1 2 3 4 5 6 7 8 9 %10 %11"

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

1
2
3
4
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幫助文檔中,給出了如下代碼:

1
2
3
4
5
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( ) 。

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

這種方法其實前面用到了,如下面例子:

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

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

1
2
3
4
5
6
7
8
9
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( )會同樣替換!

請注意下列例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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( )里的參數在進行替換時,只會按照數字從小到大的順序進行替換,只有比當前數字小的所有數字都替換完成了,才會替換當前數字,否則將當前數字和%按字符串處理。且數字為自然數

三. 使用arg(int, int, int)

原型【1】為:

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

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

如下列:

1
2
3
4
5
6
7
8
9
10
11
12
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沒有任何作用

在原型【1】中的a的類型還可以是uint、long、double、udouble等數字的類型!

這里當a的類型為double時,原型為:

1
QString QString::arg( double a, int fieldWidth = 0, char format = 'g' , int precision = -1, QChar fillChar = QLatin1Char( ' ' )) const

多了兩個參數:format和precision,一個指明規格,一個指明精度。規格默認為 'g' 或 'G',指示后面的精度為整數和小數部分總和的長度;規格為'e'或 'E' 時,表示為科學記數法形式,精度部分指示的為小數部分的位數長度;規格為其他字符時,無作用,輸出原double數字。如:

1
2
3
4
5
6
7
8
9
10
11
12
13
double d = 12.345689;
str = QString( "delta: %1" ).arg(d, 0, 'g' ,4);
//輸出為:"delta: 12.35"     ---這里進行了四舍五入
str = QString( "delta: %1" ).arg(d, 0, 'G' ,5);
//輸出為:"delta: 12.346"     ---這里進行了四舍五入
str = QString( "delta: %1" ).arg(d, 0, 'e' ,4);
//輸出為:"delta: 1.234e+01"
str = QString( "delta: %1" ).arg(d, 0, 'E' ,4);
//輸出為:"delta: 1.234E+01"
str = QString( "delta: %1" ).arg(d, 0, 'r' ,4);
//輸出為:"delta: 12.345689"
str = QString( "delta: %1" ).arg(d, 0, 'Q' ,4);
//輸出為:"delta: 12.345689"

菜鳥一枚,歡迎指出錯誤之處!

 

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM