在macOS上为Qt提供暗模式图标
我用Qt5.13编写的应用程序使用在macOS上为Qt提供暗模式图标,macos,qt,macos-darkmode,Macos,Qt,Macos Darkmode,我用Qt5.13编写的应用程序使用QToolBar。要在其上放置图标,我的源代码中有以下行: const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png")); 这很好地工作,当黑暗模式被激活时,应用程序外观会发生变化。图标会被自动处理成倒转的样子,但效果不太好,看起来很糟糕 有没有办法提供Qt在黑暗模式下使用的图标?或者,有没有办法阻止Qt反转我的图标,因为它们在暗模式下也能很好地工作?解
QToolBar
。要在其上放置图标,我的源代码中有以下行:
const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));
这很好地工作,当黑暗模式被激活时,应用程序外观会发生变化。图标会被自动处理成倒转的样子,但效果不太好,看起来很糟糕
有没有办法提供Qt在黑暗模式下使用的图标?或者,有没有办法阻止Qt反转我的图标,因为它们在暗模式下也能很好地工作?解决所述问题的一种方法是为暗模式更改引入侦听器,然后在QToolBar中相应地更改图标。正如我从QToolBar文档中看到的,实现这一点的简单方法是调用QToolBar::clear(),然后再次将所有操作添加到一起 现在是关于检测暗模式变化的部分。这部分可能有点棘手,但它是可行的。基本上,你应该在ObjtoC++中引入本地代码(这样,你就可以使用命名空间、头等,即C++的东西),然后添加目标C代码,添加侦听器来进行暗模式的更改。您可能希望将侦听器添加到的参数的名称为“AppleInterfaceHemeChangedNotification” 最后,对您的问题提出更直接的想法,这些想法不一定有效(我认为,检测暗模式变化的方法肯定有效),但可能值得尝试:
捆绑两组图标,并在调色板更改时在它们之间切换
void MainWindow::changeEvent(QEvent *event)
{
#ifdef Q_OS_MACOS
// These aren't "examples". They're literally the actual values.
constexpr int OSX_LIGHT_MODE = 236;
constexpr int OSX_DARK_MODE = 50;
QStringLiteral LIGHT_THEME{"breeze"};
QStringLiteral DARK_THEME{"breeze-dark"};
if (event->type() == QEvent::PaletteChange) {
auto bg = palette().color(QPalette::Active, QPalette::Window);
// Calling setThemeName changes every visible icon, instantly.
if (bg.lightness() == OSX_LIGHT_MODE) {
QIcon::setThemeName(LIGHT_THEME);
} else {
QIcon::setThemeName(DARK_THEME);
}
}
#else
Q_UNUSED(event)
#endif
}
至于如何捆绑图标:我不打算讨论这个问题,但这里有一个很好的指南:
在windows下处理主题时,在Designer中编辑.ui时是否仍能看到图标?