我有一个QML单例,用于如下定义的样式:
pragma Singleton
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
QtObject {
property ProgressBarStyle progressBarErrorStyle: ProgressBarStyle {
background: Rectangle {
radius: 2
color: "lightgray"
border.color: "gray"
border.width: 1
implicitWidth: 200
implicitHeight: 20
}
progress: Rectangle {
color: "orangered"
border.color: "red"
}
}
}
我可以导入对象并使用它,但是progressBarErrorStyle
的类型总是ProgressBarStyle_QMLTYPE_17
。如果我将其更改为Rectangle
,则它被正确地键入为QQuickRectangle
。
QtQuick.Controls.Styles
导入定义了ProgressBarStyle
,在QtCreator中我没有得到任何语法错误。。。那么,为什么我的对象在运行时被赋予了错误的类型呢?
您应该使用Component作为属性类型:
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
Rectangle {
property Component progressBarErrorStyle: ProgressBarStyle {
background: Rectangle {
radius: 2
color: "lightgray"
border.color: "gray"
border.width: 1
implicitWidth: 200
implicitHeight: 20
}
progress: Rectangle {
color: "orangered"
border.color: "red"
}
}
ProgressBar {
id: progressBar
NumberAnimation {
target: progressBar
property: "value"
to: 1
running: true
duration: 2000
}
style: progressBarErrorStyle
}
}
样式的组件在内部的Loader
项中使用,这些项在需要时创建组件的实例,例如,就像Qt Quick的ListView中的委托一样。