QString和QByteArray

QString有一個未標記爲explicit的構造函數QString(const QByteArray &ba),導致許多形參爲QString的函數可以接受類型爲QByteArray的實參,時間久了會會以爲這兩個類可以隨意混用,但實際並不是這樣,這兩個類適用的場景還是有區別的。

QString相較QByteArray更高級更抽象,QByteArray則更底層更具體。QString基本單位是一個個的Unicode字符(QChar),它不提供char *data()這樣可以訪問其具體儲存內容的接口,只提供了QChar *data()接口。QByteArray的基本單位是一個個的字節,可視作char *的替代品,提供了char *data()用來訪問其存儲的字節。

大家都知道,同樣的字符使用不同的編碼保存在磁盤上時,其數據可能會不同。相應的,QString提供了QByteArray toUtf8() constQByteArray toLatin1() const這樣的接口對字符進行編碼,以及QString fromUtf8(const QByteArray &str)QString fromLatin1(const QByteArray &str)這樣的接口對字節進行解碼。

QByteArray類便於對數據進行存儲和傳輸,在這樣的場景時使用QByteArray類比較合適。而對於其他場景,則是QString比較合適。舉一個例子,QJsonDocument是一個用於保存Json對象的類,它提供了QByteArray toJson() constQJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = nullptr)接口,而沒有提供QString版本的接口,在我看來就是因爲Json主要用於數據的傳輸和存儲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章