成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解 Qt 4.5多國語界面動態切換

移動開發
本文介紹的是詳解 Qt 4.5多國語界面動態切換,關于MFC本文又介紹,先來看內容。

Qt 4.5多國語界面動態切換是本文呢最近一直在折騰Qt,不過偶爾也會分分心,做了一些C++筆試題,發現自己的很多基礎知識還不牢固,可悲啊!

多國語界面的實現,在MFC中是很別扭的。以前在作MFC時,實現多國語言的界面,只有把資源文件做成各個語言的資源DLL,在程序啟動時,根據選擇判斷選擇載入哪個DLL來獲取資源。MFC的資源也是分語言的,在創建資源的時候要選擇,但是這樣的實現還有有弊端。最根本的原因是MFC的資源文件不是Unicode編碼的,而是不同語言的本地碼,至少VC6是這樣的。這樣在中文系統中載入日文的資源,界面出現的是亂碼。

Qt內部采用的全Unicode編碼,這從根本上保證了多國語界面實現的正確性和便捷性。Qt本身提供的linguist工具,就是來實現這個翻譯過程的。實現多國語的步驟大體上說來有這么幾步:

1、在需要被翻譯的字符串前面標識tr,如QString str=tr(“hello,world!”); ,這很重要,因為翻譯工具會把源碼中tr標識的字符串提取出來,翻譯成其他語言,如果沒有用tr標識的,不會被工具提取。在界面中輸入的文字,默認已經是加上tr的了,所以在翻譯時也能看見。建議:在程序中的字符串使用英文,漢語等通過多國語翻譯來實現,而不要采取把漢字寫在代碼中。

2、在工程文件***.pro中,添加一項 TRANSLATIONS +=    ***.ts  ****.ts 擴展名為.ts是翻譯的源文件,表示生成這幾個文件。一般我們會在命名中把區域加進去,更好的注釋這些文件是用于什么語言的,比如中文大多會這樣命名 myapp_zh_CN.ts, zh_CN表示的就是中國。

3、使用lupdate工具提取翻譯源文件, 命令是這樣的  #lupdate ***.pro ,lupdate會解析***.pro即工程文件,生成TRANSLATIONS中的 ***.ts 幾個文件,這些文件可以被linguist工具打開,按照提示一個一個的翻譯成需要的文件,然后保存就OK,linguist的使用很簡單,一看界面基本就會了。上面提到的這些工具都是Qt自帶的。

4、使用lrelease工具發布翻譯文件的二進制文件,這樣在程序運行時載入會大大的加快速度。使用方式是#lrelease ***.pro,這個工具會提示你多少語句被翻譯,多少被忽略了等。生成的文件是 ***.qm,于同名的 ***.ts只是換了一個擴展名。而這才是我們程序需要使用到的文件。

5、使用***.qm文件。關于這個,我想還是摘抄書上的原文來說明一下:

切換語言分為兩種情況:

1. 程序載入的時候,根據當前的區域設置,自動選擇語言包(.qm),即可;

2. 要求在程序運行過程中動態切換語言,需要
 
***種情況,一般在main函數中程序啟動的部分加入如下代碼:

  1. QString locale = QLocale::system().name());    // for example: zh_CN, en_US   
  2. QTranslator *translator = new QTranslator(app);    
  3. translator->load(QString("./language/" + locale));  // 會在當前目錄下的language目錄下尋找,可以不帶".qm"后綴名  
  4. app->installTranslator( translator );                  // 安裝翻譯器 

第二種情況,我們假設有一個QComboBox連接了changeLang的槽:

  1. connect(langCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(changeLang(int)) );  
  2. // 載入不同的語言包  
  3. void WizarDialog::changeLang( int langIndex )  
  4. {  
  5.   QTranslator *translator = new QTranslator(qApp);  
  6.   switch( langCombo->currentIndex() ){  
  7.   case 0:  
  8.     translator->load(QString("./language/pt_BR"));  
  9.     break;  
  10.   case 1:  
  11.     translator->load(QString("./language/en_US"))  
  12.     break;  
  13.   case 2:  
  14.     translator->load(QString("./language/zh_CN"));  
  15.   default:  
  16.     break;  
  17.   }  
  18.   qApp->installTranslator( translator );  
  19.   this->initGUI();  
  20. }  
  21. // initGUI() 中會有大量的tr函數  
  22. void WizarDialog::initGUI()  
  23. {  
  24. this->setWindowTitle(tr("RTA04W"));  
  25.   /* ...... */  

這兩種情況,也可以復合起來用。
 
需要說明的時, 一般我們使用設計器來設計界面UI,也就是程序源碼中我們看到的 ***.ui文件,在載入翻譯器后,我們應該調用 ui->retranslateUi() ,這個函數實際上就是把界面控件的text重新載入一遍,可以在 ui_***.cpp中看到該函數的實現。

小結:詳解 Qt 4.5多國語界面動態切換的內容介紹完了,希望本篇文章對你有幫助。

5、在幫助文檔中,關于QTranslator::load有這樣一句話。

  1. The data is not copied. The caller must be able to guarantee that data will not be deleted or modifiled. 

這段話明確的說明了,QTranslator在load以后,并沒有把qm文件中的數據拷貝一份,而是在需要的時候去查詢字符串。如果qm在這期間被刪除或修改,對程序都是有影響的。擴展開來,QTranslator必須保證要一直有效,如果在函數中定義的局部變量,函數結束后就自動釋放掉了,那么翻譯工作就不能正常進行。所以建議在private中定義個成員變量 QTranslator* app_translator;來確保整個翻譯工作的正確性。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-21 09:19:24

Qt 界面 多國語言

2009-06-10 18:01:35

netbeans下載多國語言開發版

2011-06-20 13:54:41

Qt 動態 切換

2009-03-02 09:45:45

2009-05-29 09:48:05

Sandboxie瀏覽器

2011-03-16 13:47:44

IE9

2011-06-08 15:27:24

QT QT 4.5 編譯

2011-06-27 16:59:19

Qt 動態 插件

2011-06-13 15:33:24

Qt Qt 4.5

2011-06-24 09:01:20

Qt QLibrary dll

2011-07-04 16:57:36

QT 布局 界面

2011-06-20 16:38:33

Qt QWidget Qt4.5

2012-01-09 16:00:56

2011-06-23 10:16:55

VS2010 QT 4.7.2 QT

2011-06-13 14:29:40

Qt Designer

2011-06-21 13:52:18

Qt 界面

2021-08-18 20:36:24

微信翻譯移動應用

2011-06-23 14:27:48

QT QLibrary 動態庫

2009-03-11 09:09:12

Qt開發工具SDK

2009-06-23 18:19:54

NetBeans英文界面
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品免费一区二区在线观看 | 天堂综合网久久 | 亚洲欧洲成人av每日更新 | 亚洲欧美久久 | 久草在线在线精品观看 | 性在线 | 免费看欧美一级片 | 国产成人免费在线 | 久久天堂网 | 欧美中文一区 | 国产一区 | 成人精品一区亚洲午夜久久久 | 日韩精品一区二区三区在线观看 | 黄视频免费在线 | 99久久精品免费视频 | 久久久久无码国产精品一区 | 亚洲天堂网站 | 国产粉嫩尤物极品99综合精品 | 免费特黄视频 | 二区视频| 欧美激情视频一区二区三区在线播放 | 国产在线观看一区二区 | 免费同性女女aaa免费网站 | 欧美日韩免费视频 | 中文二区| 精品视频一区二区在线观看 | 久久久亚洲一区 | 成人精品一区二区 | 91视视频在线观看入口直接观看 | 欧美激情综合五月色丁香小说 | 天天干夜夜操 | 国产精品v | 国产98色在线 | 日韩 | hitomi一区二区三区精品 | 色伊人 | 久久久久久黄 | 中文字幕免费观看 | 国产精品一区二区三区在线 | 国产精品国产a | 有码一区| 粉嫩一区二区三区四区公司1 |