【问题标题】:Change Qt application icons dynamically when language change event语言更改事件时动态更改 Qt 应用程序图标
【发布时间】:2013-09-03 22:07:41
【问题描述】:

我目前正在开发一个可以动态更改语言的 Qt 应用程序。

为了翻译字符串,我使用了QTranslator 并在我的每个小部件中重载了changeEvent 方法,这方面一切正常。

项目的资源是另一回事。实际上,Qt 资源可以在应用程序的资源文件 (.qrc) 中具有 lang 属性,但 it seems that it is only loaded at the application startup, based on the user's locale 这不是我想要的。我希望能够在我的代码中触发 LanguageChange 事件时动态更改这些图标。

我可以使用 rcc 文件来更改资源文件,但似乎这个文件只会在运行时加载,因此在运行程序之前我将无法访问 Qt Designer 中的资源。

所以我可以在我的应用程序 .pro 文件中使用 resource_en.qrc 文件,这样我就可以使用 Qt Designer 设置我的图标,然后在运行时使用我的 .rcc files(resource_fr 等...)动态设置资源?但是我如何从资源中注销 .qrc 文件并将其替换为 .rcc 文件(如果可能)

希望我说得够清楚 :D

谢谢你:)

【问题讨论】:

标签: qt qt4 translation qt-creator


【解决方案1】:

您可以使用 setWindowIcon 方法轻松地动态加载应用程序图标。假设 mainWin 是您的 QMainWindow。

if (lang == en)
    mainWin.setWindowIcon(QIcon(":/Resources/icon/en-icon.png"));
else if (lang == vn)
    mainWin.setWindowIcon(QIcon(":/Resources/icon/vn-icon.png"));

希望这能有所帮助。

【讨论】:

  • 谢谢,但我想更改项目中使用的所有资源,而不仅仅是应用程序图标。而且我没有在代码中的任何地方指定我的资源所在的位置。它们都是使用 Qt Designer 属性编辑器设置的。
【解决方案2】:

您可以使用QResource::registerResource()QResource::unregisterResource() 加载和卸载二进制资源

Dynamic resource loading

只要每个资源文件内部的虚拟路径相同,就应该正确加载。

【讨论】:

  • 谢谢,我使用了这种方法,但我也想问如何在运行时像动态资源一样在 Qt 项目中继续使用 qrc 资源,这似乎不太可能。不过我会接受你的回答!
【解决方案3】:

您是否可以尝试使用QLocale 修改您的语言环境?

   QLocale::setDefault(QLocale(QLocale::Basque, QLocale::Spain));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2015-05-09
    • 2015-06-19
    • 1970-01-01
    • 2019-10-15
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多