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

ibr*_*041 4 c++ qt themes qscintilla qt5

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

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

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

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

小智 7

下面是一些使用 QPalette 的 Python 代码,适用于我在 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
Run Code Online (Sandbox Code Playgroud)

  • 聪明的解决方案。在 qml 中,这可以调整为 `palette.windowText.hsvValue > Palette.window.hsvValue` (2认同)

ekh*_*oro 6

对于系统的颜色,你可以使用组/角色的的QPalette类。

对于系统字体,您可以QFont使用例如“Serif”、“Sans Serif”、“Monospace”等创建带有适当样式提示的字体以发现默认值。

注意

来自 Qt 文档:

警告:某些样式不会将调色板用于所有绘图,例如,如果它们使用本机主题引擎。Windows Vista 和 macOS 样式都是这种情况。