偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Qt 界面實(shí)現(xiàn)多國(guó)語言的切換實(shí)例

移動(dòng)開發(fā)
Qt內(nèi)部采用的全Unicode編碼,這從根本上保證了多國(guó)語界面實(shí)現(xiàn)的正確性和便捷性。Qt本身提供的linguist工具,就是來實(shí)現(xiàn)這個(gè)翻譯過程的。實(shí)現(xiàn)多國(guó)語的步驟大體上說來有這么幾步:

Qt 界面實(shí)現(xiàn)多國(guó)語言切換實(shí)例是本文要介紹的內(nèi)容,一直認(rèn)為Qt界面相對(duì)于還是很好實(shí)現(xiàn)的一種開發(fā)。多國(guó)語界面的實(shí)現(xiàn),在MFC中是很別扭的。以前在作MFC時(shí),實(shí)現(xiàn)多國(guó)語言界面,只有把資源文件做成各個(gè)語言的資源DLL,在程序啟動(dòng)時(shí),根據(jù)選擇判斷選擇載入哪個(gè)DLL來獲取資源。MFC的資源也是分語言的,在創(chuàng)建資源的時(shí)候要選擇,但是這樣的實(shí)現(xiàn)還有有弊端。最根本的原因是MFC的資源文件不是Unicode編碼的,而是不同語言的本地碼,至少VC6是這樣的。這樣在中文系統(tǒng)中載入日文的資源,界面出現(xiàn)的是亂碼。

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

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

2、在工程文件***.pro中,添加一項(xiàng) TRANSLATIONS +=    ***.ts  ****.ts 擴(kuò)展名為.ts是翻譯的源文件,表示生成這幾個(gè)文件。一般我們會(huì)在命名中把區(qū)域加進(jìn)去,更好的注釋這些文件是用于什么語言的,比如中文大多會(huì)這樣命名 myapp_zh_CN.ts, zh_CN表示的就是中國(guó)。

3、使用lupdate工具提取翻譯源文件, 命令是這樣的  #lupdate ***.pro ,lupdate會(huì)解析***.pro即工程文件,生成TRANSLATIONS中的 ***.ts 幾個(gè)文件,這些文件可以被linguist工具打開,按照提示一個(gè)一個(gè)的翻譯成需要的文件,然后保存就OK,

linguist的使用很簡(jiǎn)單,一看界面基本就會(huì)了。上面提到的這些工具都是Qt自帶的。

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

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

切換語言分為兩種情況:

1. 程序載入的時(shí)候,根據(jù)當(dāng)前的區(qū)域設(shè)置,自動(dòng)選擇語言包(.qm),即可;

2. 要求在程序運(yùn)行過程中動(dòng)態(tài)切換語言,需要
 
***種情況,一般在main函數(shù)中程序啟動(dòng)的部分加入如下代碼:

  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() 中會(huì)有大量的tr函數(shù)    
  22. void WizarDialog::initGUI()    
  23. {    
  24.   this->setWindowTitle(tr("RTA04W"));    
  25.   /* ...... */    
  26. }  

這兩種情況,也可以復(fù)合起來用。

需要說明的時(shí), 一般我們使用設(shè)計(jì)器來設(shè)計(jì)界面UI,也就是程序源碼中我們看到的 ***.ui文件,在載入翻譯器后,我們應(yīng)該調(diào)用 ui->retranslateUi() ,這個(gè)函數(shù)實(shí)際上就是把界面控件的text重新載入一遍,可以在 ui_***.cpp中看到該函數(shù)的實(shí)現(xiàn)。

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

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

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

小結(jié):Qt 界面實(shí)現(xiàn)多國(guó)語言的切換實(shí)例的內(nèi)容介紹完了,希望本篇文章能夠?qū)δ阌兴鶐椭。。?/p>

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-30 13:37:29

MFC Qt 多國(guó)語

2009-06-10 18:01:35

netbeans下載多國(guó)語言開發(fā)版

2009-03-02 09:45:45

2011-06-21 09:33:49

Qt 啟動(dòng) 界面

2011-03-16 13:47:44

IE9

2009-05-29 09:48:05

Sandboxie瀏覽器

2011-06-20 13:54:41

Qt 動(dòng)態(tài) 切換

2021-08-18 20:36:24

微信翻譯移動(dòng)應(yīng)用

2011-06-21 14:12:14

Qt Linux 登錄界面

2025-05-09 09:12:00

2011-06-13 14:29:40

Qt Designer

2011-06-24 16:09:24

Qt 動(dòng)畫 狀態(tài)機(jī)

2011-06-22 17:36:50

QT Linux 串口

2011-06-28 16:40:17

Qt Widget 圖片

2009-04-28 16:18:29

.Net MicroSideShow

2011-06-21 13:52:18

Qt 界面

2011-06-29 16:50:17

Qt 顯示寬字符

2009-09-03 17:06:17

C#回車切換焦點(diǎn)

2021-12-25 19:19:18

AndroidAndroid 13安卓

2009-12-24 15:13:24

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)