我有一个像这样的组件:
import QtQuick 2.15
Item {
id: root
property double value: 0.0
property int core: 1
property color progressBarColor: "black"
property color minMaxTextColor: "black"
property int fontSize: height - 6
//....
}
现在,我认为最好是需要一些属性,因为在使用组件时应声明它们。所以我改为:
import QtQuick 2.15
Item {
id: root
required property double value
required property int core
property color progressBarColor: "black"
property color minMaxTextColor: "black"
property int fontSize: height - 6
//....
}
该组件在中继器中被调用,如下所示:
SystemInformation{
id: sysinfo
}
Column{
id: displayColumn
Repeater{
model: sysinfo.coreUtilizationsInPercent.length
CoreUtilizationDisplay{
width: root.elementWidth
height: root.elementHeight
fontSize: root.fontSize
progressBarColor: "#3399FF" // blue
minMaxTextColor: "blue"
core: index + 1
value: sysinfo.coreUtilizationsInPercent[index]
}
}
}
现在,在我完成所需的属性之前,它可以正常工作。我不知道为什么它不起作用?
如果我声明需要它,则会出现此错误:
qrc:/qml/SystemInformationDisplay.qml:57: ReferenceError: index is not defined
我对中继器中没有的类似组件执行了相同的操作,并且在那里工作正常。
为什么?
答案 0 :(得分:2)
从qt develop blog
如果您的代表不包含必需的属性,则此处没有任何变化。但是,如果它们至少包含一个必需的属性,则将无法再访问这些名称。相反,您必须通过将它们指定为必需属性来明确选择加入。
在这种情况下,您需要将所需的属性索引添加到组件中。
import QtQuick 2.15
Item {
id: root
required property double value
required property int core
required property int index // add it
property color progressBarColor: "black"
property color minMaxTextColor: "black"
property int fontSize: height - 6
//....
}
使用此附加索引,您可以构建组件并访问索引。您无需指定索引。完成,因为它是委托。
Repeater{
model: sysinfo.coreUtilizationsInPercent.length
delegate: CoreUtilizationDisplay{
width: root.elementWidth
height: root.elementHeight
fontSize: root.fontSize
progressBarColor: "#3399FF" // blue
minMaxTextColor: "blue"
core: index + 1
value: sysinfo.coreUtilizationsInPercent[index]
}
}
更多信息,请参见documentation