將 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 * 就是亂碼,採用以下方法解決:測試
#include <QTextCodec> QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
而後將上面的第3行修改成:code
QByteArray ba = str.toLocal8Bit(); // toLocal8Bit 支持中文
QString filename; std::string str = filename.toStdString(); const char* ch = str.c_str();
將 char * 轉換爲 QString 比較容易操做,咱們能夠使用 QString 的構造函數進行轉換:文檔
QString(const QLatin1String &str);
QLatin1String 的構造函數:字符串
QLatin1String(const char *str);
所以用下面這個語句就能夠將 char * ch 轉換爲 QString str 了,以下:string
str = QString(QLatin1String(ch));