我试图在可重复使用的QML组件中定义具有默认值的属性。到目前为止,这是我的代码:
property alias value: progressBar.value
property bool error: false
property ProgressBarStyle errorStyle: ProgressBarStyle {
background: Rectangle {
radius: 2
color: "lightgray"
border.color: "gray"
border.width: 1
implicitWidth: 200
implicitHeight: 24
}
progress: Rectangle {
color: "orangered"
border.color: "red"
}
}
Layout.fillWidth: true
ProgressBar {
id: progressBar
Layout.fillWidth: true
minimumValue: 0.0
maximumValue: 100.0
style: errorStyle
}
因此构思errorStyle
并将其设置为style
的{{1}}。我知道progressBar
有效,因为如果我直接在errorStyle
设置它就可以了。据我所知,当我运行程序时,progressBar
的问题是errorStyle
。
更新:
提出这个问题的一个更好的方法是:"我如何绕过' PropertyChanges不支持创建特定于州的对象。'如果我直接在PropertyChanges数组中创建样式,我会收到错误消息吗?
更新2:
我基本放弃了这种方法并决定尝试使用样式代替。这导致了另一个问题:Cannot create certain QML types in a singleton
答案 0 :(得分:0)
您可以尝试使用id声明它,并使用id。因此,不要将其作为财产来确定,而是将其作为一个组件。像这样:
ProgressBarStyle {
id: errorStyle
background: Rectangle {
radius: 2
color: "lightgray"
border.color: "gray"
border.width: 1
implicitWidth: 200
implicitHeight: 24
}
progress: Rectangle {
color: "orangered"
border.color: "red"
}
}
ProgressBar {
id: progressBar
Layout.fillWidth: true
minimumValue: 0.0
maximumValue: 100.0
style: errorStyle
}
但我采取的方法是制作属性颜色和bordercolor,并改变样式的矩形颜色,而不是完全改变样式。
像这样:
property Color barColor
property Color barBorderColor
property Color progressColor
property Color progressBorderColor
ProgressBar {
id: progressBar
Layout.fillWidth: true
minimumValue: 0.0
maximumValue: 100.0
style: ProgressBarStyle {
background: Rectangle {
radius: 2
color: barColor
border.color: barBorderColor
border.width: 1
implicitWidth: 200
implicitHeight: 24
}
progress: Rectangle {
color: progressColor
border.color: progressBorderColor
}
}
}