【问题标题】:How can I remove all QTranslator from the app?如何从应用程序中删除所有 QTranslator?
【发布时间】:2017-09-04 14:51:34
【问题描述】:

我想使用 QCoreApplication::installTranslator 更改语言,并为每种语言使用几个不同的 .qm 文件(项目的不同部分导致不同的 .qm 文件)。

可以使用多个 .qm 文件:

QCoreApplication::installTranslator(QTranslator *translationFile)
可以安装多个翻译文件。搜索翻译 因为它们的安装顺序相反,所以最 最近安装的翻译文件首先搜索 最后搜索安装的翻译文件。

但是,如果我不remove 年长的翻译人员,他们仍然是翻译的候选人。即使他们是最近安装较少的翻译器。

如何在加载所需文件之前清除之前加载的任何文件?

我看到的唯一方法是保留我安装的指针,并在我想更改时将它们一一删除,但是有没有更直接的方法?

【问题讨论】:

  • 您可以显示您注释的代码以便更好地理解。
  • 只需维护一些旧译者的列表。或者使用一些共同的父母(它可以是一些虚拟的QObject)来维护它。在这种情况下,您将能够删除相应的翻译。我不认为这应该是个问题。
  • @MarekR 不是,但是让 QApp 这样做会很方便,因为它已经知道您安装的翻译器,它可以只清除其私人翻译器列表,而不是让我删除他们一个接一个。

标签: qt qtranslator


【解决方案1】:

我维护了已安装翻译器的列表:

// Install the translators
for (auto fileName : qAsConst(fileList)) {
    auto translator = QSharedPointer<QTranslator>::create();
    translator->load(fileName);

    m_currentTranslators << translator;
    QCoreApplication::installTranslator(translator.data());
}

并将它们全部删除:

for (auto translator : qAsConst(m_currentTranslators)) {
    QCoreApplication::removeTranslator(translator.data());
}
m_currentTranslators.clear();

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2016-09-10
    • 2017-03-28
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多