就像标题中所说的那样,我遇到一个问题:我有一个ListView
,一个普通的delegate
和一个highlight
。
在我的突出显示内,我在Text
中放置了一个id
组件,以便我可以引用它。
所以行为应该是这样的:我将ListView
的项目移动通过,然后在键盘上按数字时,highlight
内的文本应显示出来。
但是任何时候我尝试使用上述Text
组件(像id
一样被textComponent.text = "123"
引用),都会得到ReferenceError: textComponent is not defined
。
我浏览了文档,但没有发现与无法通过id
突出显示内容有关的任何内容。
有人知道这是什么原因吗,还是根本不支持这种行为?
我没有提供任何代码,因为该问题易于解释和重现,但是如果有人需要,我很乐意提供一小段内容。
编辑 代码
ListView
{
height: 500
width: 500
model: ListModel { id: channelListModel }
highlightMoveDuration: 200
highlightRangeMode: ListView.ApplyRange
snapMode: ListView.SnapToItem
preferredHighlightBegin: height * 0.2
preferredHighlightEnd: height * 0.8
delegate: Item
{
id: channelItem
width: ListView.view.width * 0.96
height: parent.height
Text
{
anchors.fill: parent
text: "generic row text"
}
}
Keys.onPressed:
{
switch(event.key)
{
case Qt.Key_0:
case Qt.Key_1:
case Qt.Key_2:
case Qt.Key_3:
case Qt.Key_4:
case Qt.Key_5:
case Qt.Key_6:
case Qt.Key_7:
case Qt.Key_8:
case Qt.Key_9:
textComponent.text = event.key
}
}
highlight: Rectangle
{
id: highlight
color: "#40ffffff"
Text
{
id: textComponent
anchors.fill: parent
}
}
答案 0 :(得分:2)
如果您查看ListView
的文档,就会发现type of the property highlight
是Component
。
Component
总是为id
创建一个新的上下文,就像在另一个文件中一样。
这意味着您无法从外部访问id
内部的Component
。组件可能已被实例化多次或根本没有实例化-因此id
不会是唯一的。
您能做什么?
在property
中创建一个ListView
,然后从组件内部读取它。
ListView {
id: myListView
...
property string hightlightText
highlight: SomeItem { // Will be automatically transformed in a Component and initaly not fully created
Text {
text: myListView.highlightText // You can reference ids of the 'outside world'
}
}
}