1. 程式人生 > >Qt中QString與基本型別的轉換問題

Qt中QString與基本型別的轉換問題

之前寫過幾篇文章,後來由於部分原因刪除掉了,最近剛好希望在Qt方面寫一點東西,方便大家查詢,也希望大家可以相互關注,多做交流,我會堅持在今後的Qt的工作學習中,不斷地更新遇到的技術問題與Qt的一些基礎知識。

最近在程式設計時,遇到了一個問題,大致是一堆float型別的資料,需要轉換為QDateTime型別,於是經過查閱文件,發現Qt中的一些基本的資料型別比如int, float, double 轉換成QString型別是比較方便的,Qt的API會封裝相關的方法,如果反向轉換的話,需要自己手動程式設計。

在由int, float, double 這樣的基本資料型別轉換為QString的方法大致如下:

以int為例:

int tmp = 125;  
QString str_a = QString::number(tmp, 10);             // str_a == "125"   十進位制  
QString str_b = QString::number(tmp, 16).toUpper();   // str_b == "7D"   十六進位制

以float為例,或者:
float tmpNum = 3.1415;  
QString str = QString("%1").arg(tmpNum);    // str == "3.1415"

在工作中,上述轉換用的不是很多,大多數都是由QString型別轉換到基本的資料型別使用的比較多,由於Qt的API有方法,所以用起來很簡單,方法大致如下:

以轉為float, double為例:

QString str = "3.1415";   
float toFloatValue = str.toFloat();               // toFloatValue == 3.1415  
double toDoubleValue = str.toDouble();     // toDoubleValue == 3.1415

上面這種方法比較適合與科學計數法的表示:
double value = QString("1234.56e-03").toDouble();  // value == 1.23456  

需要注意的是,經常QString的內容轉換成對應的基本資料型別是建立在QString的內容正確性的基礎上進行的,

假設QString的內容是一個基本資料型別無法識別的情況下會導致轉換錯誤,為了提高程式的健壯性,我們通常會在轉換時加一個bool型的變數用於判斷轉換是否成功,用法如下:

QString str = "HelloQt";  
bool ok;  
float value = str.toFloat(&ok);  //如果轉換失敗時 value == 0.0,  並且ok == false;

以轉int為例:
Qstring str = "FF";  
bool ok;  
int dec = str.toInt(&ok, 10);   // dec==255 ; ok==true  
int hex = str.toInt(&ok, 16);   // hex==255;  ok==true;

轉換為QString後就可以進行QString與QDateTime進行轉換了,轉換的方法如下:

》》 QDateTime 轉換為 QString

 函式原型:QString QDateTime::toString ( Qt::DateFormat format = Qt::TextDate ) const

QString str;  
QDateTime time;  
time = QDateTime::currentDateTime();  
str = time.toString("yyyy-MM-dd hh:mm:ss");   // strBuffer = 2010-07-02 17:35:00

》》QString 轉換為 QDateTime

 函式原型:QDateTime QDateTime::fromString ( const QString & string, const QString & format )   [static]

QString str;  
QDateTime time;  
str = "2010-07-02 17:35:00";  
time = QDateTime::fromString(strBuffer, "yyyy-MM-dd hh:mm:ss");