Qt中的字串類QString

2021-07-07 05:01:33 字數 3381 閱讀 4458

qt下面,字串都用qstring,確實給開發者提供了方便,想想vc裡面定義的各種變數型別,而且函式引數型別五花八門,經常需要今年新那個型別轉換

qt再使用第三方開源庫時,由於庫的型別基本上都是標準的型別,字串遇的多的就是char*型別

在qt下怎樣將qstring轉char*呢,需要用到qbytearray類,qbytearray類的說明詳見qt幫助文件。

因為char*最後都有乙個『/0』作為結束符,而採用qstring::tolatin1()時會在字串後面加上『/0』

方法如下:

qstring  str;

char*  ch;

qbytearray ba = str.tolatin1();    

ch=ba.data();

這樣就完成了qstring向char*的轉化。經測試程式執行時不會出現bug

注意第三行,一定要加上,不可以str.tolatin1().data()這樣一部完成,可能會出錯。

補充:以上方法當qstring裡不含中文時,沒有問題,但是qstring內含有中文時,轉換為char*就是亂碼,採用如下方法解決:

方法1:

新增gbk編碼支援:

#include

qtextcodec::setcodecfortr(qtextcodec::codecforname("gbk"));

qtextcodec::setcodecforlocale(qtextcodec::codecforname("gbk"));

然後改變上面的第三行為:qbytearray ba = str.toloacl8bit();      toloacl8bit支援中文

方法2:

先將qstring轉為標準庫中的string型別,然後將string轉為char*,如下:

std::string str = filename.tostdstring();

const char* ch = str.c_str();

qstring與qchar

qt是乙個跨平台的框架中,自然在設計的時

候就起點不低。。。

它封裝了乙個

qstring

類來代表字串,它是 乙個

unicode16

編碼的類。

同時封裝了乙個

qchar

類代表寬字元

在qt**裡使用中文

預設是亂碼:

qstring str = "

你好中國

"; ui.lineedit‐>settext(str);

原因:cpp是

gbk編碼,不能直接給

qstring

gbk <‐> qstring

//gbk ‐>qstring

qstring str =qstring::fromlocal8bit("你好中國");

//qstring ‐>gbk

qstring text = ui.lineedit‐>text(); 

qbytearray bytes =text.tolocal8bit(); 

const char* gbk = bytes.data();

注:qbytearray是qt由於封裝位元組陣列的乙個類,詳見qt的幫助文件。

gbk <‐> qstring

本地編碼:

local8bits

由於我們使用的是中文

windows

,所以本地編碼就 是

gbk

然而,如果我們的系統是中文

linux

,那本地編 碼。。。很可能是

utf‐8

這意味著以上**不保險。。。

字串字面常量的編碼

在cpp

中使用字串字面常量時,要注意

cpp檔案本 身的編碼是

gbk還是

utf‐8。

比如,

char text ="

你好中國";

這個字串由幾個位元組組成?是什麼編碼?

這取決於這個

cpp檔案本身是按什麼編碼儲存的

使用utf‐8

utf‐8 ‐>qstring : c

風格字串

‐> qstring

char utf8 = ; 

qstringstr2 = qstring::fromutf8(utf8);

qstring ‐> utf‐8 : 

qstring ‐> c

風格字串

qstring text =ui.lineedit‐>text(); 

qbytearray bytes = text.toutf8(); 

const char* utf8 =bytes.data();

int size = bytes.size();

使用qtextcodec

qtextcodec

用於手工轉換編碼

(qstring

內部呼叫此類)

//qstring(unicode) ‐> std::string (gbk)

static stringfromunicode(const qstring& qstr)

使用qtextcodec

gbk

到qstring

// std::string (gbk) ‐> qstring(unicode)

static qstring    tounicode(const string& cstr)

發布程式

當程式中帶有中文轉換處理時,需要將

qt使用的文 字編碼庫一同發布。

windows下qt

應用程式:

(1)  

找到qt

的編碼庫:

c:\qt\4.7.3\plugins\codecs

從c:\qt\4.7.3\bin的目錄下直接拷貝qtcored4.dll,qtguid4.dll

(2) 

拷貝codecs

這個資料夾,放到目標

exe檔案所在目 錄下

(3)  把vs

的執行時庫拷貝到

codecs

目錄下 小結:

中文問題的解決:

(1)gbk:普通的單機應用程式

使用qtextcodec()

(2)utf-8:大型系統,網路傳輸

一般在大型應用程式中,統一使用utf-8編碼。

Qt入門 字串類QString

qstring是unicode字元的集合,它是qt api中使用的字串類。qstring的成員是qchar,qchar是乙個16位unicode字元類。大多數編譯器把它看作是乙個unsigned short。qstring和c標準中的字串不同,它不以 0 結尾,相反,qstring可以嵌入 0 字元...

Qt中的字串類

在c語言中 c 的解決方案 標準庫stl中的字串 stl的缺陷 不同廠商的編譯器所帶的stl存在差異。依賴於stl開發的c 程式在不同平台上的行為可能出現差異!那麼我們開發中對於庫的選擇也需要有所考慮 專案是否需要在不同平台間移植?專案是否需要圖形使用者介面?qt中的字串類 qstring的優點 q...

Qt之QString字串分割 擷取

在做專案中不可避免的會使用到一串字串中的一段字元,因此常常需要擷取字串。有兩種方式可以解決這個問題 方法一 qstring分割字串 qstring date dateedit.tostring yyyy mm dd qstringlist list date.split qstring字串分割函式方...