Почему делегат ListView не может ссылаться на свойства ListView? - PullRequest
0 голосов
/ 07 марта 2019

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

Документы , кажется, говорят, что Компонент должен иметь возможность видеть свойства во вложенных областях, где он был объявлен.

import QtQuick 2.12
import QtQuick.Controls 2.12

ApplicationWindow {
    visible:true

    ListView {
        orientation: ListView.Vertical; height: 300; width: 100

        property var myCount: 3
        property var myMessage: "Hello"

        Component {
          id: myComp
          Text {text: myMessage} // ReferenceError: myMessage is not defined
        }
        model: myCount // this works
        delegate: myComp
    }       
}

(В моем реальном приложении ListView - это компонент (файл .qml), и вызывающий должен передать информацию, необходимую для настройки делегата; текст, как в этом примере, но информация для вложенного ListView.)

Спасибо за любую помощь ...

1 Ответ

0 голосов
/ 07 марта 2019

Переменные в QML имеют область видимости, в вашем случае при использовании myMessage без ссылки они указывают, что переменная принадлежит элементу Text.

# ...
Component {
    id: myComp
    Text {text: myMessage} 
}
# ...

Таким образом, решение состоит в том, чтобы использовать идентификатор ListView в качествессылка:

# ...
ListView {
    id: lv
    orientation: ListView.Vertical; height: 300; width: 100
    property var myCount: 3
    property var myMessage: "Hello"
    Component {
      id: myComp
      Text {text: lv.myMessage} 
    }
    model: myCount // this works
    delegate: myComp
}
# ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...