6

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

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

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

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

4

2 回答 2

6

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

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

注意

来自 Qt 文档:

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

于 2016-03-08T22:53:31.673 回答
2

这是一些使用 QPalette 在 Linux 上对我有用的 python 代码:

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
于 2021-10-25T09:30:41.983 回答