如何识别 Linux 上深色主题中的应用程序 运行?

How to recognize that an application is running in dark theme on Linux?

我开发了一个使用 qscintilla 作为文本编辑器的应用程序。我还实现了自定义词法分析器来突出显示语言特定的关键字。到目前为止,突出显示的关键字的样式在我的应用程序中是硬编码的,在 Windows/Linux(Ubuntu)/Mac.

的默认主题中看起来还不错

用户选择深色主题时出现问题(Linux)。根据 QScintilla 版本,编辑器的某些部分会反映当前的主题颜色,而其他部分则不会。此外,我的自定义样式在深灰色背景上呈现深蓝色字母。

我正在寻找一些 Qt class,它将允许我访问当前的系统主题。我不想为我的应用程序小部件定义样式。 我想知道什么是系统默认的非比例字体,它的大小、颜色是什么……如果我知道使用深色方案,我会选择互补色来突出显示关键字。

我检查了 QStyle、QPlatformTheme 和其他 qt classes 的文档,在我看来,它们更多地用于定义新样式,然后用于描述当前样式。

对于系统颜色,您可以使用QPaletteclass的group/role

对于系统字体,您可以创建 QFont 使用例如“Serif”、“Sans Serif”、“Monospace”等,使用适当的 style hint 来发现默认值。

注意事项:

来自 Qt 文档:

Warning: Some styles do not use the palette for all drawing, for instance, if they make use of native theme engines. This is the case for both the Windows Vista and the macOS styles.

这是一些 python 使用 QPalette 的代码,适用于我 Linux:

label = QLabel("am I in the dark?")
text_hsv_value = label.palette().color(QPalette.WindowText).value()
bg_hsv_value = label.palette().color(QPalette.Background).value()
dark_theme_found = text_hsv_value > bg_hsv_value