QFileDialog动态翻译

时间:2014-03-30 20:16:05

标签: c++ qt qtranslate

这个问题有unfortunately been asked before,但我在这里疯了。 在我的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中安装此转换器,结果相同。

1 个答案:

答案 0 :(得分:3)

默认情况下,QFileDialog将使用本机文件浏览器而不是基于Qt的自定义对话框。本机文件浏览器将使用OS语言而不是Qt语言,并且不会应用Qt转换。您可以使用DontUseNativeDialog的{​​{1}}选项覆盖此行为。