2014-12-24 25 views
1

我想動態地重新加載QTranslator,然後用「靜態附加標籤」重新動態創建的小部件。如何重新創建動態創建的小部件?

例如我有靜態的標籤一樣:

QString AutoplanWorkspace::IMPORT = QPushButton::tr("Import"); 

,然後創建動態有此標籤的控制:

QPushButton *button1 = new QPushButton(IMPORT) 

而且我加載新的翻譯這樣的:

if (myTranslator.load("C:\\tr.qm")) { 
    //myTranslator.setParent(parent); 
    qApp->installTranslator(&myTranslator); 
    } 

從我可以理解我需要重新加載UI:

controls.retranslateUi(this); 

但是,動態部分和靜態屬性也不在Ui::中,並且據我瞭解它不會自動翻譯。如何通過動態加載另一個翻譯器來翻譯動態部分?

回答

2

在包含按鈕的類中,您應該覆蓋changeEvent並在其中捕獲QEvent :: LanguageChange。在那裏你可以a)調用retranslateUi動態地重新翻譯你的.ui文件中的文本(你已經完成了),並且b)重新翻譯所有手動創建的字符串(例如,使用button1-> setText(tr(「Import」))。 如果你看一下retranslateUi函數,你會發現自動生成的ui文件也包含了對設計器中每個文本集的再次調用QApplication :: translate。顯然,這對於在外部定義的字符串是不會自動完成的.ui文件,因此您將始終需要手動執行此操作。