這個問題有unfortunately been asked before但我在這裏瘋了。 在我的Qt應用程序中,用戶可以動態更改適用於我自己翻譯的完美語言。它不適用於我對QFileDialog的調用。相應的代碼:QFileDialog動態翻譯
void myapp::change_language(std::string& lang_str){
// my own translations works
qApp->removeTranslator(&this->app_lang);
this->app_lang.load(QString::fromStdString(lang_str));
qApp->installTranslator(&this->app_lang);
// system translations, works not for qfiledialog
qApp->removeTranslator(&this->app_lang_qt);
bool test = this->app_lang_qt.load("qt_fr.qm"); // returns true
qApp->installTranslator(&this->app_lang_qt);
}
而且
void myapp::changeEvent(QEvent* event){
if(event->type() == QEvent::LanguageChange){
this->ui.retranslateUi(this);
}
QMainWindow::changeEvent(event);
}
隨着
QTranslator app_lang;
QTranslator app_lang_qt;
固定字符串 「qt_fr.qm」 只是用於測試目的,因爲法國是容易被檢測到。
我想要的是將靜態調用中的語言更改爲QFileDialog和QMessageBox,但語言僅在QMessageBox中更改,而不是在QFileDialog中更改。對於這兩個類,我只是調用靜態成員來解決問題。我也試着在main.cpp中安裝這個翻譯器,結果相同。
另一個解決方案的不同之處在於它加載了Qt translation FIRST。並且不使用app_lang_qt,而是調用「installTranslator」。 – RedX
感謝您的回覆。我會嘗試更改訂單,但應該沒有什麼不同,因爲文檔狀態可以安裝多個翻譯器。我不太瞭解你評論的第二部分。鏈接解決方案是主要功能,因此可以使用本地QTranslator。我實現了一個動態變化,它需要我將QTranslator保存在某個地方,所以我有兩個變量。此外,將代碼移到main()並不能解決問題。 – Bowdzone
是的,不幸的是,改變順序並沒有解決問題。 – Bowdzone