1.總結---tr()和QTextCodec對象


1. 關於Qt 中的tr()函數-------http://tscsh.blog.163.com/blog/static/200320103201310213312518/

 

在論壇中漂,經常遇到有人遇到tr相關的問題。用tr的有兩類人:

 

  • (1)因為發現中文老出問題,然后搜索,發現很多人用tr,於是他也開始用tr
  • (2)另一類人,確實是出於國際化的需要,將需要在界面上顯示的文件都用tr包起來,這有分兩種:
    • (2a) 用tr包住英文(最最推薦的用法,源碼英文,然后提供英文到其他語言的翻譯包)
    • (2b) 用tr包住中文(源碼用中文,然后提供中文到其他語言的翻譯包); 

注意哦,如果你正在用tr包裹中文字符,卻不屬於(2b),那么,這是個信號:

  • 你在誤用tr
  • 你需要的是QString,而不是tr
  • tr 是做什么的?下面二者的區別是什么?

    QString text1 = QObject::tr("hello"); QString text2 = QString("hello");

     

    tr是用來實現國際化,如果你為這個程序提供了中文翻譯包(其中hello被翻譯成中文"你好"),那么text1的內容將是中文"你好";如果你為程序提供且使用日文翻譯包,那么text1的內容將是日文。

    tr是經過多級函數調用才實現了翻譯操作,是有代價的,所以不該用的時候最好不要用。

 ----------------------意味着,當你使用tr()時,就需要實現提供語言包,比如這樣的代碼

1 QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));//在代碼中可以使用中文

 

 

2. QTextCodec對象---http://my.oschina.net/michaelbirdliu/blog/12649

 

//關於QTextCodec對象:

//      該對象主要用於非Unicode編碼數據與Unicode編碼數據之間的轉換,例如:

//假設現在有一個采用俄國的KOI8-R編碼格式的字符串encodedString,現在將它轉換成Unicode
1 QByteArray encodedString = "Hello"; 
2 
3 QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QString string = codec->toUnicode(encodedString);

 

//上述操作完成后,string里存儲的就是Unicode編碼的字符串了


//相反的過程:
1 QTextCodec *codec = QTextCodec::codecForName("UTP-8");
2 
3 QByteArray encodedString = codec->fromUnicode(string); //UTF-8是中文編碼

 

//操作完成后,encodedStirng里存儲的就是從Unicode轉換來的UTF-8編碼的字符串了

//上述代碼也實現了從KIO8-R到UTF-8的轉換

 


免責聲明!

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



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