Qt 必需的属性不能与中继器一起工作
我有这样一个组件:Qt 必需的属性不能与中继器一起工作,qt,qml,Qt,Qml,我有这样一个组件: 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: heig
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
我对中继器中没有的类似组件也做了同样的操作,在那里它工作得很好
为什么?来自qt
如果您的委托不包含必需的属性,则此处不会发生任何更改。但是,如果它们至少包含一个必需的属性,则这些名称将不再可访问。相反,您必须通过将它们指定为必需属性来显式地选择加入
在这种情况下,您需要将所需的属性索引添加到组件中
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]
}
}
更多信息可在
委托:CoreUtilitizationDisplay
为什么委托?所有其他功能都在没有它的情况下工作。因为索引在delegated中工作,即使添加了delegate,只要我声明属性,仍然会出现错误required@Sandro4912我认为这是一个错误,报告它。代表是不相关的,因为在复读者的情况下,代表是对迟到的回答表示感谢。我从来没有想到,在我遇到同一个问题的今天,你必须明确地添加索引。我认为这种行为是不直观的。