Не могу сослаться на материал в выделении ListView - PullRequest
0 голосов
/ 30 августа 2018

Как сказано в названии, у меня проблема с ListView, с обычными delegate и highlight.

В моем выделении я поместил компонент Text с id, чтобы я мог ссылаться на него.

Таким образом, поведение должно быть таким: я перемещаюсь по элементам ListView, и когда я нажимаю число на моей клавиатуре, текст внутри highlight должен отображать его.

Но каждый раз, когда я пытаюсь что-либо сделать с вышеупомянутым Text компонентом (укажите его id, например textComponent.text = "123", я получу ReferenceError: textComponent is not defined.

Я просмотрел документацию, но не нашел ничего, связанного с невозможностью получить доступ к содержимому выделения id.

Кто-нибудь знает, что может быть причиной этого, или такое поведение просто не поддерживается?

Я не включил ни одного кода, так как проблема легко объясняется и воспроизводится, но если кому-то это понадобится, я с удовольствием включу короткий фрагмент этой вещи.

EDIT Код

  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
                }
         }

1 Ответ

0 голосов
/ 30 августа 2018

Если вы посмотрите в документации ListView, вы обнаружите, что тип свойства highlight равен Component.

A Component всегда создает новый контекст для id s, как это было бы в другом файле. Это означает, что вы не можете получить доступ к id s внутри 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'
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...