【问题标题】:QFileDialog dynamic translationQFileDialog动态翻译
【发布时间】:2014-03-30 20:16:05
【问题描述】:

这个问题有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 中安装这个翻译器,结果相同。

【问题讨论】:

  • 另一个解决方案的不同之处在于它首先加载 Qt 翻译。而且也不使用 app_lang_qt 而是调用installTranslator
  • 感谢您的回复。我将尝试更改顺序,尽管它不应该有所作为,因为文档指出可以安装多个翻译器。我真的不明白你评论的第二部分。链接的解决方案在 main 函数中,因此可以使用本地 QTranslator。我实现了一个动态更改,需要我将 QTranslator 保存在某处,所以我有两个变量。此外,将代码移动到 main() 并不能解决问题。
  • 是的,很遗憾,更改顺序并没有解决问题。

标签: c++ qt qtranslate


【解决方案1】:

默认情况下,QFileDialog 将使用本机文件浏览器而不是自定义的基于 Qt 的对话框。本机文件浏览器将使用操作系统语言,而不是 Qt 语言,并且不会应用 Qt 翻译。您可以使用 QFileDialogDontUseNativeDialog 选项覆盖此行为。

【讨论】:

  • 我怎么会错过呢?非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2011-04-05
相关资源
最近更新 更多