如何全局定义渐变颜色?

时间:2017-12-12 09:40:27

标签: qt colors qml gradient

我的QML中有Gradient,如下例所示。是否可以定义颜色"#1AD6FD"或"#1D62F0"全球QML?

gradient: Gradient {
    GradientStop { position: 0.00; color: "#1AD6FD"  }
    GradientStop { position: 1.00; color: "#1D62F0" }
}

1 个答案:

答案 0 :(得分:1)

您可以在任何QML对象上定义自定义属性。

Rectangle {
    id: root

    // you can define your on custom properties like this
    property color gradientColor1: "#1AD6FD"
    property color gradientColor2: "#1D62F0"
}

然后在任何其他有权访问通过id。

定义对象的项目中使用它
Item {
    gradient: Gradient {
        GradientStop { position: 0.00; color: root.gradientColor1 }
        GradientStop { position: 1.00; color: root.gradientColor1 }
    }
}

如果您想重复使用,也可以全局定义整个渐变。

如果要访问其他QML文件中的属性,有多种方法可以执行此操作。如果您可以访问QML根对象,您也可以从其他文件访问其属性,或者您可以定义一个全局JavaScript库,其中包含一些颜色值常量,但我认为不是整个QML对象(只有纯JS)。

另一种简单的方法是定义一个独立的QML对象,它只包含项目的一些全局属性,并将其包含在你的其他QML文件中,只有一个id来引用它,这可能是最简单的解决方案。

只需定义一个空的QML-Item,其中包含一些属性,如上面的Rectangle示例,并将其包含在您的其他QML文件中

Rectangle {
    id: root

    // include your custom QML global item (GlobalProperties.qml)
    GlobalProperties {
        id: globalProperties
    }

    // then you can use it like before, i.e.
    color: globalProperties.gradientColor1 // color prop from your GlobalProperties.qml
}