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");