12.QT4.7.4-解決WIN平台和Linux平台中文亂碼,QLineEdit右擊菜單中文顯示


 

1.解決Win平台中文顯示

1.1首先解決win平台上中文顯示亂碼問題

1)首先查看qt creator的編碼格式

通過->編輯->選擇編碼 查看.

2)如果qt creator的編碼格式是utf8,並且項目里的漢字是utf8類型時

需要添加頭文件:

#include <QTextCodec>

在main()函數加入:

  QTextCodec *codec = QTextCodec::codecForName("utf8"); 

  QTextCodec::setCodecForTr(codec);

  QTextCodec::setCodecForLocale(codec);

  QTextCodec::setCodecForCStrings(codec);

3)如果qt creator的編碼格式是GBK,並且項目里的漢字是GBK類型時

添加頭文件:

#include <QTextCodec>

在main()函數加入:

  QTextCodec *codec = QTextCodec::codecForName("GBK"); //GBK gbk

  QTextCodec::setCodecForTr(codec);

  QTextCodec::setCodecForLocale(codec);

  QTextCodec::setCodecForCStrings(codec);

 

1.2 其次解決按鈕、QLineEdit等編輯組件右擊菜單等英文問題

如下圖所示:

 

步驟:

1)搜索qt_zh_CN.ts ,找到位於: C:\Qt\4.7.4\translations\qt_zh_CN.ts

2)在開始程序里打開qt預言家(linguist.exe)

 

3)通過linguist.exe打開找到的qt_zh_CN.ts文件,進行翻譯

如下圖所示,發現都是大多翻譯好了的:

 

上面表示該文件的tr("")字符串已被翻譯完

接下來點擊File->Release 生成翻譯文件: qt_zh_CN.qm

4)再將qt_zh_CN.qm放到自己項目的資源文件里

5)在main函數里添加以下代碼

//注意:必須要放在QApplication a(argc, argv);后面處,因為下面代碼要初始化這個對象
QTranslator *trans = new QTranslator;
trans->load(":/res/qm/qt_zh_CN.qm"); 
QCoreApplication::installTranslator(trans);

 

6)測試效果

 

 

 

2.解決Linux平台中文顯示

2.1解決亂碼,無法打印中文

 有可能是qt配置界面的字體不支持中文

1)輸入命令qtconfig

2)進入Qt配置界面,如下圖所示,如果發現亂碼,那就說明qt配置字體錯了:

3)點擊第2格,然后選擇字體,只要能顯示中文出來,便可以:

 

 

4.設置好后,退出並保存,然后運行自己寫的記事本程序效果:

 

 

 

5)發現使用QPlainTextEdit編輯組件無法打出漢字

找到是輸入法沒有全局設置,輸入命令ibus-setup,然后勾上全局設置:

 

PS:Linux下的中文輸入法默認輸入是UTF-8,所以需要保證qt creator編碼格式也是UTF-8,否則輸入中文會亂碼

 

2.2其次解決按鈕、QLineEdit等編輯組件右擊菜單等英文問題

1)輸入sudo find /  -name  qt_zh_CN*

 

從上圖可以看到,qt已經為我們做好了qt_zh_CN.qm,然后將這個拷貝出來,加入到資源里

2)和Win平台一樣,通過代碼調用qt_zh_CN.qm

3)試驗效果,發現按鈕, QLineEdit右擊菜單還是顯示英文

4)使用qt預言家(linguist)從新發布試試

輸入linguist,打開找到的qt_zh_CN.qm:

 

發現都是翻譯好了的,那再次從新發布試試.

 

5)從新發布后,再次調用新發布的qt_zh_CN.qm,試驗效果

發現ok了,如下圖所示:

 

 

 

 

 如果需要項目文件在Win/Linux上都要運行

設置Qt Creator:

進入編輯->選擇編碼  ,選擇UTF-8類型

進入工具->選項->文本編輯器->行為,選擇UTF-8編碼

在代碼里只需要調用:

char s[]="utf-8";
QTextCodec::setCodecForTr(QTextCodec::codecForName(s));
QTextCodec::setCodecForLocale(QTextCodec::codecForName(s));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(s));

就不再需要考慮,項目文件轉編碼問題了.

 
        

 


免責聲明!

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



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