我试图在可重用的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
被构造并设置为progressBar
的style
。我知道errorStyle
是有效的,因为如果我直接在progressBar
上设置它,它是有效的。据我所知,问题是当我运行程序时,errorStyle
就是null
。
更新:
也许陈述这个问题的更好方法是:"如果我直接在PropertyChanges数组中创建样式,我该如何绕过‘PropertyChanges不支持创建状态特定对象’的错误消息?
更新2:
我基本上已经放弃了这种方法,决定尝试使用样式。这导致了另一个问题:无法在单例中创建某些QML类型
您可以尝试用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
}
但我会采取的方法是制作一个属性颜色和边框颜色,并更改样式的矩形颜色,而不是完全更改样式。
像这样:
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
}
}
}