日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QTextCodec中的setCodecForTr等终于消失了 (Qt5)

發布時間:2025/3/21 c/c++ 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QTextCodec中的setCodecForTr等终于消失了 (Qt5) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 在Qt4中,國內很多新手都喜歡——不分青紅皂白地使用如下3行代碼

QTextCodec::setCodecForTr(...) QTextCodec::setCodecForCStrings(...) QTextCodec::setCodecForLocale(...)

盡管之前零零散散寫過一點這方面的內容,比如

  • QString 與中文問題

  • Qt中translate、tr關系 與中文問題

  • Qt國際化(源碼含中文時)的點滴分析

但是,敢死隊員還是一批一批的 ... 讓人少多有些無奈

癥結?

在國內,之所以用很多人用這3行代碼,是因為他們在源代碼的const?char*這種窄字符串中使用了中文。

然后,發現。不對啊,咋全是亂碼呢?于是上網搜索,發現其他人用的這3行代碼

于是,加上試試。發現:在自己的當前環境下(固定系統、固定地區語言設置、固定編譯環境)還真的沒有亂碼了。

于是乎?完全不考慮那3行代碼的作用了,反正自己能用就行了,管它什么副作用呢!!

Qt5

在Qt5中,這個問題終于不復存在了,因為

這兩個函數

QTextCodec::setCodecForTr(...) QTextCodec::setCodecForCStrings(...)

被直接去掉了。

這樣一來,受影響的直接是如下代碼了:

QString s1 = "我是中文"; QString s2("我是中文"); QString s3 = QObject::tr("我是中文")

好消息/壞消息?

  • 壞消息

現在Qt5中盡管去掉了setCodecXXX這兩個函數,但是默認編碼還是latin1。如果你要想使用

"我是中文"

這樣的字符串,必須自己使用QTextCodec或這QString::fromXXX 這種東西進行轉換

  • 好消息?是:

Qt5發布之時,默認將會是utf8編碼,完全可以將你從Qt編碼問題解放出來。

  • 壞消息,如果使用的是 MSVC2005/2008/2010,可能無法使用utf8編碼,于是

下面的代碼

QString s1 = "我是中文"; QString s2("我是中文"); QString s3 = QObject::tr("我是中文")

將不會工作。

  • 因為從MSVC2005起,你無法給編譯器設置字符串要使用的編碼。盡管2003之前,也無法設置,但是它會遵循源碼文件的編碼。而2005就自作聰明了,即使你源碼文件保存成不帶BOM的utf8,它都會試圖幫你轉換一下。
  • 好消息是什么呢?

如果你在Windows下,且使用的是MinGW,那么只要你將源碼文件保存成utf8,前面的代碼將直接可以工作(無須其他設置)

如果你在其他平臺了,那么應該都默認是utf8文件。同樣無須進行設置。

  • 好消息

如果你的編譯器支持C++11,那么,你可以直接使用

QString s = u8"我是中文";
  • 壞消息

主流編譯器還都不怎么支持C++11

參考

  • http://codereview.qt-project.org/#change,14999

  • http://codereview.qt-project.org/#change,14626


轉自:http://blog.csdn.net/dbzhang800/article/details/7325698

總結

以上是生活随笔為你收集整理的QTextCodec中的setCodecForTr等终于消失了 (Qt5)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。