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

标签 c++ qt themes qt5 qscintilla

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

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

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

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

最佳答案

对于系统颜色,您可以使用 group/role QPalette 类。

对于系统字体,您可以使用例如创建一个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.

关于c++ - 如何识别应用程序在 Linux 上以深色主题运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35879025/

相关文章:

themes - Opencart 2.2 - 新的自定义主题在管理面板中不可用

android - 主题级别的 RecyclerView 样式

c++ - diamond中无法通过std::unique_ptr访问最基类的protected成员变量

c++ - Qt SDK 和 CD/DVD 刻录

c++ - 为什么 C++ 需要单独的头文件?

c++ - qt 等待信号/事件,GUI

c++ - 使用 QT 网络序列化和使用 Boost 反序列化

android - API 21 (Lollipop) Android 上的主题对话框

c++ - std::unordered_map<std::String, myClass*> - std::unordered_map::erase() 是否调用 myClass 的 DTor?

c++ - 如何在循环中访问数组对象的成员函数