QML property is null



我试图在可重用的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被构造并设置为progressBarstyle。我知道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
        }
    }
}

相关内容

  • 没有找到相关文章