如何从应用程序中删除所有 QTranslator?

Posted

技术标签:

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

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

可以使用多个 .qm 文件:

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

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于如何从应用程序中删除所有 QTranslator?的主要内容,如果未能解决你的问题,请参考以下文章

如何基于 QTranslator 更改 QPushButton 的图标字符串

QTranslator 仅适用于我的程序的某些部分

QTranslator 在 if 语句中使用时不起作用

为啥我需要一个 QTranslator 来在 Windows 上的 QMessageBox 中本地化按钮文本?

具有真实 QLocale 的 Canonical QTranslator 示例

QTranslator 如何处理语言环境修饰符 PyQT?