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

Posted

技术标签:

【中文标题】如何基于 QTranslator 更改 QPushButton 的图标字符串【英文标题】:How to change a QPushButton's Icon String based on QTranslator 【发布时间】:2017-08-16 20:18:43 【问题描述】:

我有一个带有按钮的应用程序,这些按钮为各种点击状态设置了图标,没有设置或显示实际的 QPushButton 文本;它都包含在图标中。

这些图标文件包含需要翻译的文本,并且已经为每种语言和状态生成。我正在寻找一种方法来使用 QTranslator 或 QAction 类来根据所选的主要语言自动选择要使用的按钮的本地化版本。

例如:

BTN_Media_Browse->setIcon(QIcon(QPixmap(tr(":/Images/BTN_Media_Browse_Unpressed.png"))));

我已按照QT Wiki: Multi Language Application 上的说明进行操作,但按钮未显示在生成的翻译 (.ts) 文件中。根据语言为每个使用实例设置一个 switch case 并不理想。

【问题讨论】:

您要翻译整个文本还是只翻译一部分? 我想翻译位置文本。例如:tr(":/Images/BTN_Media_Browse_Unpressed.png") 变为 ":/Images/BTN_Media_Browse_Unpressed_en.png"":/Images/BTN_Media_Browse_Unpressed_de.png" 为清楚起见进行了编辑。 您可以通过 github、drive、dropbox 或类似的方式分享您的测试代码。 您可以使用 .qrc 文件。请参阅Qt 资源系统 主题。例如:<qresource> <file>cut.jpg</file> </qresource> <qresource lang="fr"> <file alias="cut.jpg">cut_fr.jpg</file> </qresource> 这非常有效。请提供此作为答案,以便我接受。可能值得为像我这样困惑的其他人添加更多说明或链接。 【参考方案1】:

要根据用户的区域设置使用不同的图标,您可以在 .qrc 文件中添加带有 lang 属性的 qresource 部分。

例如:

<qresource>
    ...
    <file alias="Images/BTN_Media_Browse_Unpressed.png">Images/BTN_Media_Browse_Unpressed_en.png</file>
    ...
</qresource>
<qresource lang="de">
    ...
    <file alias="Images/BTN_Media_Browse_Unpressed.png">Images/BTN_Media_Browse_Unpressed_de.png</file>
    ...
</qresource>

然后你可以用这样的代码来使用它:

BTN_Media_Browse->setIcon(QIcon(":/Images/BTN_Media_Browse_Unpressed.png"));

【讨论】:

以上是关于如何基于 QTranslator 更改 QPushButton 的图标字符串的主要内容,如果未能解决你的问题,请参考以下文章

pyqt5 如何识别该函数中是哪个qpush_button激活了该函数? [关闭]

如何在基于 Qt 的应用程序中支持多种语言

QTranslator 没有在 PyQt5 中持久安装

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

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

具有真实 QLocale 的 Canonical QTranslator 示例