相关疑难解决方法(0)

如何在 PyQt5 (5.13) 中启用 macOS 暗模式

我正在使用 PyQt5 制作我的第一个 GUI 应用程序,但它目前不适用于暗模式。

你如何在 PyQt5 中启用暗模式?

我使用 PyQt5 v5.13.0 并在 Mac、Linux 和 Windows 上使用 PyInstaller 冻结应用程序。

如果您需要更多信息或某些代码,请告诉我。

python qt5 pyqt5

6
推荐指数
1
解决办法
1515
查看次数

检测 Qt 中当前使用的桌面的深色应用程序风格/主题

在我们基于 Qt 的 C++ 应用程序中,我尝试根据用户是否配置了深色或明亮主题来自动切换应用程序样式。

我已经弄清楚了更改发生时的通知(见下文,供其他人参考)。

我的主要问题是可靠地检测当前在 Linux 上使用的是深色主题还是明亮主题(对于 Windows,请参见下文);在 XFCE 上,此答案中提到的 QPalette 颜色角色检查有效,但这对我来说在 Gnome 和 KDE Plasma 上不起作用(在 Ubuntu 22.04 和 Fedora 36 下测试,我的应用程序针对 Qt 版本 6.5beta2 和 6.4.2 构建, 分别); 那里的颜色似乎仍然取自我在同一台机器上设置为 XFCE 主题的颜色(当启动 xfce4-appearance-settings 并在那里更改主题时,我的应用程序会接受更改)。不过,我想适应当前桌面的深色模式设置。

所以,我的问题是:如何可靠地检测Qt 上当前使用的桌面的应用程序暗模式?如果 Qt 中没有直接可用的东西,我并不反对实现一些特定于平台的自定义代码,但如果它无需使用其他库即可工作,那就太好了。

我看到的QApplication::setPalette注释可能与这里相关,即“某些样式并不使用调色板进行所有绘图,例如,如果它们使用本机主题引擎。”,这些都是关于什么的?我没有看到此功能的文档链接,并且快速搜索术语“qt 本机主题引擎”似乎也没有产生任何有用的结果。

由于在 Linux 上,每当系统主题发生更改时,都会可靠地触发一些事件(见下文),我想 Qt可以检测到主题更改,它只是不公开公开有关它的数据?

收到主题更改通知

  • 在 Linux 上:通过监听QEvent::StyleChange应用程序 QMainWindow 的事件;两个警告和一个旁注:

    • 尽管QWidget::changeEvent 文档明确提到了该事件,但它不会触发changeEvent(对我来说),但必须通过更通用的方式捕获QWidget::event
    • StyleChange 似乎只从某些 Qt 6.4 版本开始触发(在我的测试中,它不是由 5.15.2 和 6.3.1 触发,而是由 6.4.2 和 6.5.0beta2 …

c++ qt gnome kde-plasma

5
推荐指数
1
解决办法
2597
查看次数

标签 统计

c++ ×1

gnome ×1

kde-plasma ×1

pyqt5 ×1

python ×1

qt ×1

qt5 ×1