如何创建遵循 Material 样式颜色的自定义 QML 控件?

How do I create a custom QML Control that respects the Material Style colors?

我正在为我的应用程序在 QML 中创建自定义控件。我想在桌面上 运行 和 Android,所以我在应用程序中使用 Material 样式。这会将配色方案应用于所有现有的 Qt Quick Controls 2 控件(按钮、工具栏等)。但是我如何在我的控件上使用这些颜色呢?我知道我可以将相同的颜色与十六进制代码或其他任何东西一起使用,但如果我更改主题中的强调色等,我希望我的控件的颜色发生变化。

我试过 SystemPalette 但那里的颜色似乎不遵循 Material 样式,而是始终遵循默认样式。

我可以使用 Material 颜色吗?如果应用程序 运行 处于非 Material 模式,会发生什么情况?

您可以导入样式:

import QtQuick.Controls.Material 2.2

import QtQuick.Controls.Universal 2.2

然后可以通过单例获得颜色:

console.log(Material.accent)
console.log(Material.primary)
// etc...

可以使用 QQuickStyle 从 C++ 检索当前样式(您需要 link 针对 Qt5QuickControls2 库)

请记住,您还可以设置样式颜色。而且它的主题也不是那么复杂,每个样式有3-4种颜色。

因此您可以在单例中定义您自己的一组颜色,将您使用的任何样式设置为这些颜色,并在您的自定义内容中使用这些相同的颜色。通过这种方式,您将在默认样式的内容和您的元素之间实现统一,并且无论您使用哪种样式,颜色变化都会影响所有内容。

刚刚弄明白了。在任何实际控件上设置 id,然后您可以访问 "extra" 颜色,如 controlId.Material.buttonColor