在進行編程時,我們經常需要用到字符串這種類型,毫無疑問,Qt 庫中也對字符串類型進行了封裝,QString 類提供了你能想到的所有字符串操作方法,給開發者帶來了極大方便。
但是我們在編寫程序時,不可避免地會在 Qt 框架上使用第三方的開源庫,由於庫的類型基本上都是標准的類型,即使用 char * 來表示字符串類型。那么問題來了,QString 和 char * 之間如何進行轉換呢?
下面分兩種情況進行說明。
一、QString 轉換為 char *
將 QString 轉 char *,需要用到 QByteArray 類,QByteArray 類的說明詳見 Qt 幫助文檔。
因為 char * 最后都有一個'\0'
作為結束符,而采用 QString::toLatin1() 時會在字符串后面加上'\0'
。
代碼:
1 char *ch; 2 QByteArray ba = FileNames[0].toLatin1(); 3 ch = ba.data(); 4 5 QString test = QString(QLatin1String(ch));
這樣就完成了 QString 向 char * 的轉化。經測試程序運行時不會出現 bug。注意第3行,一定要加上,不可以 str.toLatin1().data() 這樣一步完成,否則可能會出錯。
補充:以上方法當 QString 里不含中文時,沒有問題,但是 QString 內含有中文時,轉換為 char * 就是亂碼,采用如下方法解決:
方法1:
添加GBK編碼支持:
然后將上面的第3行修改為:
QByteArray ba = FileNames[0].toLocal8Bit(); //支持中文
方法2:
先將 QString 轉為標准庫中的 string 類型,然后將 string 轉為 char *。如下:
二、 char * 轉換為 QString
將 char * 轉換為 QString 比較容易操作,我們可以使用 QString 的構造函數進行轉換:
QString test = QString(QLatin1String(ch));