來自《Qt5.9 C++開發指南》
普通數值和字符串之間的轉換
一、從字符串轉換為數值
QString類從字符串轉換為整數的函數有:
int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const long QString::toLong(bool *ok = Q_NULLPTR, int base = 10) const short QString::toShort(bool *ok = Q_NULLPTR, int base = 10) const uint QString::toUInt(bool *ok = Q_NULLPTR, int base = 10) const ulong QString::toULong(bool *ok = Q_NULLPTR, int base = 10) const
這些函數如果不設置參數,缺省表示從十進制表示的字符串轉換為整數,若指定整數基參數,還可以直接將二進制、十六進制字符串轉換為整數。
QString將字符串轉換為浮點數的函數有:
float QString::toFloat(bool *ok = Q_NULLPTR) const double QString::toDouble(bool *ok = Q_NULLPTR) const
使用方法如下:
QString str("12"); int num = str.toInt();
二、將數值轉換為字符串
可以使用QString的靜態函數number()和asprintf(),也可以使用其公共函數setNum()和sprintf()。QString的sprinf()函數與C語言里的sprintf()函數的格式時一樣的,而setNum()和number()函數使用另外一種格式定義,而且setNum和number有多個重載函數定義,可以處理各種類型的整數和浮點數,在處理整數時還可以指定進制,例如將一個整數直接轉換為十六進制或二進制字符串。
static函數asprintf()原型(沒有重載)
QString asprintf(const char *cformat, ...)
static函數number()原型及其重載
QString number(long n, int base = 10) QString number(uint n, int base = 10) QString number(int n, int base = 10) QString number(ulong n, int base = 10) QString number(qlonglong n, int base = 10) QString number(qulonglong n, int base = 10) //第一個參數表示所想要轉換的double類型數據(就算實際參數不是double類型,形參會將其賦值為double類型) //第二個參數和第三個參數分別表示格式和精度 QString number(double n, char format = 'g', int precision = 6)
public函數sprintf原型(沒有重載)(ps:該函數已過時,官方強烈建議不要使用)
QString & sprintf(const char *cformat, ...)
public函數setNum()原型及其重載
QString & setNum(int n, int base = 10) QString & setNum(ushort n, int base = 10) QString & setNum(short n, int base = 10) QString & setNum(uint n, int base = 10) QString & setNum(long n, int base = 10) QString & setNum(ulong n, int base = 10) QString & setNum(qlonglong n, int base = 10) QString & setNum(qulonglong n, int base = 10) QString & setNum(float n, char format = 'g', int precision = 6) QString & setNum(double n, char format = 'g', int precision = 6)
最后舉一個關於這四個函數的例子
float num = 1.5151; QString str; //以下四個語句的結果都一樣,str最終變為"1.52" //str = QString::asprintf("%.2f",num); //str = QString::number(num,'f',2); //str = str.setNum(num,'f',2); str = str.sprintf("%.2f",num);