我用Qt5.13编写的应用程序使用QToolBar。为了在上面放置图标,我在我的源代码中有这一行:
const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));这可以很好地工作,并且当暗模式被激活时,应用程序的外观会发生变化。这些图标被自动处理成反转的样子,但效果并不好,它们看起来很糟糕。
有没有办法提供Qt在黑暗模式下使用的图标?或者,有没有办法阻止Qt颠倒我的图标,因为它们在黑暗模式下也会工作得很好?
发布于 2019-09-02 22:25:50
解决上述问题的一种方法是引入一个用于更改暗模式的侦听器,然后相应地更改QToolBar中的图标。正如我在QToolBar文档中看到的,实现此目的的直接方法是调用QToolBar::clear(),然后再次将所有操作添加到一起。
现在关于检测暗模式的部分发生了变化。这一部分可能有点棘手,但它是可行的。基本上,您应该在Objective C++中引入本机代码(因此,您将能够使用名称空间、头文件等,即来自C++的东西),然后添加Objective C代码,该代码添加用于暗模式更改的侦听器。您可能要向其中添加监听程序的参数的名称为"AppleInterfaceThemeChangedNotification“。
最后,对你的问题有更直接的想法,但不能保证有效(我认为检测暗模式变化的方法肯定有效),但可能值得一试:
发布于 2020-07-22 21:53:48
捆绑两组图标,并在调色板更改时在它们之间切换。
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
}至于如何捆绑图标:我不打算深入讨论,但这里有一个很好的指南:
https://stackoverflow.com/questions/57728796
复制相似问题