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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM