为什么ListView委托不能引用ListView的属性?

时间:2019-03-07 05:58:35

标签: qt listview properties qml

如果ListView包含用户定义的属性,则可以在model的绑定中引用这些属性,但对于委托内部的任何内容,它们可以。为什么会这样?

The docs似乎在说Component应该能够在声明它的范围内查看属性。

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 :(得分:0)

QML中的变量具有作用域,在您使用myMessage而不引用的情况下,这些变量指示该变量属于Text项。

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

因此解决方案是使用ListView id作为参考:

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