QML属性为null
我试图在可重用的QML组件中定义一个具有默认值的属性。以下是我迄今为止的代码:QML属性为null,qml,qt5,Qml,Qt5,我试图在可重用的QML组件中定义一个具有默认值的属性。以下是我迄今为止的代码: property alias value: progressBar.value property bool error: false property ProgressBarStyle errorStyle: ProgressBarStyle { background: Rectangle { radius: 2 color: "lightgray" borde
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:
我基本上放弃了这种方法,决定尝试使用样式。这引出了另一个问题:您可以尝试使用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
}
}
}
但是我将采取的方法是创建属性颜色和边框颜色,并更改样式的矩形颜色,而不是完全更改样式
像这样:
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
}
}
}
使用组件和id无效,同样的问题。我想替换整个样式对象的原因是,在Mac上,默认的进度条样式是系统定义的,而且据我所知,是不透明的,因此我无法更改颜色,因此我想在出现错误情况时更改整个样式。那么,按照我在第二个解决方案中的建议更改颜色呢?正如我所说,OSX上的进度条默认是由系统定义的(例如,它是动画的),根据我所知,不是简单的样式,所以我不能仅仅更改颜色。我指的是ProgressBarStyle矩形背景和进度的颜色。不要告诉我它不起作用,因为我知道它起作用,我测试了它。它起作用,但它不起我想要的作用。问题是默认情况下,在OSX上我会得到一个漂亮的蓝色动画进度条——我没有指定样式。虽然我可以像你建议的那样指定样式和切换颜色,但我会丢失动画进度条。