QString 轉換爲 char *

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行修改成:code

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 了,以下:string

str = QString(QLatin1String(ch));
相關文章
相關標籤/搜索