【问题标题】:How do I create a custom QML Control that respects the Material Style colors?如何创建尊重 Material Style 颜色的自定义 QML 控件?
【发布时间】:2018-02-04 08:14:09
【问题描述】:

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

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

我可以访问材料颜色吗?如果应用在非Material模式下运行会怎样?

【问题讨论】:

    标签: qt qml qt5 qtquick2 qtquickcontrols2


    【解决方案1】:

    您可以导入样式:

    import QtQuick.Controls.Material 2.2
    

    import QtQuick.Controls.Universal 2.2
    

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

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

    可以使用QQuickStyle 从 C++ 中检索当前样式(您需要链接到 Qt5QuickControls2 库)

    【讨论】:

    • 谢谢!那行得通……但这意味着即使我不在材质模式下,我也在使用材质颜色。有什么方法可以检测我处于什么模式?
    • 嗯,在尝试实际使用它时,我发现并非所有颜色都在那里。例如,Button 的默认背景颜色在深色和浅色主题之间变化,但两种颜色都不在 Material 上显示的集合中。我必须创建一个隐藏按钮并访问button.background.color 才能获得它:/
    • AFAIK 有些是在运行时以样式计算的(例如Qt.darker(background)
    【解决方案2】:

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

    因此,您可以在单例中定义自己的一组颜色,为这些颜色设置您使用的任何样式,并在您的自定义内容中使用这些相同的颜色。这样,您将实现默认样式的内容与您的元素之间的一致性,并且颜色更改将影响一切,无论您使用哪种样式。

    【讨论】:

      【解决方案3】:

      刚刚想通了。在任何实际控件上设置id,然后您可以访问“额外”颜色为controlId.Material.buttonColor

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-28
        • 2012-08-30
        • 2018-07-24
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多