一、怎樣去掉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函數的開始位置;
1 QApplication a(argc, argv); 2
3 //加載語言包
4 QTranslator qtTranslator; 5 qtTranslator.load( "testtranslator_zh"); 6 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”文件,復制到項目目錄;
1 QTranslator qtTranslatorStandard; 2 qtTranslatorStandard.load("qt_zh_CN"); 3 a.installTranslator(&qtTranslatorStandard);
2、修改ts文件
** QDialogButtonBox的確定、取消按鈕沒有正常翻譯
解決方法:在“qt_zh_CN.ts”里面手動添加:
1 <context>
2 <name>QPlatformTheme</name>
3 <message>
4 <location filename="../src/widgets/qdialogbuttonbox.cpp" line="+42"/>
5 <location line="+18"/>
6 <source>OK</source>
7 <translation>確定</translation>
8 </message>
9 <message>
10 <location line="+54"/>
11 <source>Cancel</source>
12 <translation>取消</translation>
13 </message>
14 ..... 15 </context>
** QMessageBox中的QMessageBox::Yes, QMessageBox::No沒有正常翻譯
解決方法:上述context中再添加:
1 <message>
2 <source>&Yes</source>
3 <translation>是</translation>
4 </message>
5 <message>
6 <source>&No</source>
7 <translation>否</translation>
8 </message>
注意:在xml中<source>&Yes</source>的寫法是<source>&Yes</source>
3、保存並發布修改后的翻譯文件
