不幸的是,以前有人问过这个问题,但我在这里要疯了。在我的 Qt 应用程序中,用户能够动态更改适合我所有翻译的语言。它不适用于我对 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 中安装此翻译器,结果相同。