无法在ListView高亮显示中引用内容

问题描述 投票:0回答:1

就像标题所说,我有一个问题,我有一个ListView,与通常的delegatehighlight

在我的亮点中,我放置了Text组件与id,所以我可以参考它。

所以行为应该是这样,我通过ListView的项目移动,当我按下键盘上的数字时,highlightsh中的文本显示它。

但任何时候我尝试用前面提到的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 reference qml
1个回答
2
投票

如果你查看ListView的文档,你会发现type of the property highlightComponent

Component总是为ids创建一个新的上下文,就像它在另一个文件中一样。这意味着,您无法从外部访问id内的Components。组件可能已多次实例化或根本不实例化 - 因此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'
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.