就像标题所说,我有一个问题,我有一个ListView
,与通常的delegate
和highlight
。
在我的亮点中,我放置了Text
组件与id
,所以我可以参考它。
所以行为应该是这样,我通过ListView
的项目移动,当我按下键盘上的数字时,highlight
sh中的文本显示它。
但任何时候我尝试用前面提到的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
}
}
如果你查看ListView
的文档,你会发现type of the property highlight
是Component
。
Component
总是为id
s创建一个新的上下文,就像它在另一个文件中一样。这意味着,您无法从外部访问id
内的Component
s。组件可能已多次实例化或根本不实例化 - 因此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'
}
}
}