QString 轉換為 char *
阿新 • • 發佈:2018-12-13
1.QString 轉換為 char
將 QString 轉 char ,需要用到 QByteArray 類,QByteArray 類的說明詳見 Qt 幫助文件。
因為 char * 最後都有一個'\0'作為結束符,而採用 QString::toLatin1() 時會在字串後面加上'\0'。
QString str;
char* ch;
QByteArray ba = str.toLatin1(); // must
ch=ba.data();
這樣就完成了 QString 向 char * 的轉化。經測試程式執行時不會出現 bug。注意第3行,一定要加上,不可以 str.toLatin1().data() 這樣一步完成,否則可能會出錯。
補充:以上方法當 QString 裡不含中文時,沒有問題,但是 QString 內含有中文時,轉換為 char * 就是亂碼,採用如下方法解決:
方法1:新增GBK支援
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然後將上面的第3行修改為:
QByteArray ba = str.toLocal8Bit(); // toLocal8Bit 支援中文
方法2:先將 QString 轉為標準庫中的 string 型別,然後將 string 轉為 char 。如下:
QString filename;
std::string str = filename.toStdString();
const char ch = str.c_str();
2.char * 轉換為 QString
將 char * 轉換為 QString 比較容易操作,我們可以使用 QString 的建構函式進行轉換:
QString(const QLatin1String &str);
QLatin1String 的建構函式:
QLatin1String(const char *str);
因此用下面這個語句就可以將 char * ch 轉換為 QString str 了,如下:
str = QString(QLatin1String(ch));