一、怎樣去掉ui檔案
1、為什麼要去掉ui檔案
項目開發不建議使用.ui檔案,因為.ui檔案使部分代碼不可見,同時當多人同時開發時,合并分支會出現許多衝突。
2、去掉ui檔案的方法
使用QtDesigner開啟ui檔案,點擊“表單“菜單下的”查看代碼“項,會彈出ui檔案對應的源檔案;
將其中的包含檔案複製到引用ui檔案的源檔案中;
將Ui_***類中的成員變數,複製到引用ui檔案的標頭檔的類中, 將setupUi函數、retranslateUi函數複製為該類的成員函數,並複製函數體;
在類的建構函式中將”ui.setupUi( this )“的調用改為” setupUi( this )“;
二、QTranslator的使用
1、產生翻譯檔案
項目名上右鍵菜單,選擇”create new translation file“;項目中會添加一個以”.ts“為尾碼的檔案,例如”testtranslator_zh.ts“;
使用Qt Linguist開啟該檔案,就可以為指定的字串設定譯文;
翻譯完成後,點擊”檔案“菜單下的”發布“項,就會產生.qm檔案;
2、載入翻譯檔案
在應用程式啟動時載入翻譯檔案,一般放在main函數的開始位置;
QApplication a(argc, argv);//載入語言套件QTranslator qtTranslator;qtTranslator.load( "testtranslator_zh");a.installTranslator( &qtTranslator );
3、update 翻譯檔案
在應用程式代碼中修改後添加某些翻譯字串後,“.ts”檔案不會自動更新,需要在相應的“.ts”檔案的右鍵菜單中點擊“lupdate”項,才會更新。
注意:翻譯檔案的載入位置必須在介面執行個體化之前完成
注意:在程式中每一個使用tr()函數的字元創都會顯示到Qt Linguist中,另外tr()的範圍修飾很重要,因為Qt Linguist會根據該範圍設定不同的上下文,比如原始碼中只存在TestTranslator::tr("**")和TestTranslatorClass::tr("**")兩種類型的字串,那麼Qt Linguist會產生兩個上下文:TestTranslator和TestTranslatorClass,用TestTranslator修飾的字串會出現在TestTranslator上下文中,用TestTranslatorClass修飾的字串會出現在TestTranslatorClass上下文中,方便字串的管理。
三、Qt標準對話方塊中的翻譯
1、安裝qt標準的翻譯檔案
在Qt安裝目錄中搜尋“qt_zh_CN.qm”檔案和“qt_zh_CN.ts”檔案,複製到項目目錄;
QTranslator qtTranslatorStandard;qtTranslatorStandard.load("qt_zh_CN");a.installTranslator(&qtTranslatorStandard); 2、修改ts檔案
** QDialogButtonBox的確定、取消按鈕沒有正常翻譯
解決方案:在“qt_zh_CN.ts”裡面手動添加:
<context> <name>QPlatformTheme</name> <message> <location filename="../src/widgets/qdialogbuttonbox.cpp" line="+42"/> <location line="+18"/> <source>OK</source> <translation>確定</translation> </message> <message> <location line="+54"/> <source>Cancel</source> <translation>取消</translation> </message> ..... </context>
** QMessageBox中的QMessageBox::Yes, QMessageBox::No沒有正常翻譯
解決方案:上述context中再添加:
<message> <source>&Yes</source> <translation>是</translation> </message> <message> <source>&No</source> <translation>否</translation> </message>
注意:在xml中<source>&Yes</source>的寫法是<source>&Yes</source>
3、儲存並發布修改後的翻譯檔案