首页 > 解决方案 > 为 macOS 上的 Qt 提供暗模式图标

问题描述

我用 Qt 5.13 编写的应用程序使用QToolBar. 要在其上放置图标,我的源代码中有这一行:

const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));

这很好用,当激活暗模式时,应用程序的外观会发生变化。图标会自动处理以看起来倒置,但效果不佳,它们看起来非常糟糕。

有没有办法提供 Qt 用于暗模式的图标?或者,有没有办法阻止 Qt 反转我的图标,因为它们在黑暗模式下也能很好地工作?

标签: macosqtmacos-darkmode

解决方案


解决所描述问题的一种方法是引入暗模式更改的侦听器,然后在 QToolBar 中相应地更改图标。正如我从 QToolBar 文档中看到的那样,直接的方法是调用 QToolBar::clear(),然后再次将所有操作添加到一起。

现在关于检测暗模式的部分发生了变化。这部分可能有点棘手,但它是可行的。基本上,您应该在Objective C++ 中引入本机代码(因此,您将能够使用命名空间、标头等,即来自C++ 的东西),然后添加Objective C 代码,为暗模式更改添加侦听器。您可能想要添加侦听器的参数名称是“AppleInterfaceThemeChangedNotification”。

最后,对您的问题的更直接的想法不能保证有效(我认为检测暗模式更改的方法肯定会有效),但可能值得尝试:

  1. 您是否尝试过将您的 PNG 图标的像素图添加到所有州的 QIcon?你可以在这里看到它:https ://doc.qt.io/qt-5/qicon.html#addPixmap
  2. 不确定这是否可行,但也许设置作为面具的标志会做些什么?https://doc.qt.io/qt-5/qicon.html#setIsMask
  3. 您是否尝试过将小部件添加到 QToolBar 而不是操作:https ://doc.qt.io/qt-5/qtoolbar.html#addWidget ?也许添加自定义小部件不会使您的图标看起来很糟糕,尽管它们正在显示模式?当然,请记住,在这种特定情况下,您可能必须创建自己的小部件。

推荐阅读