根据财产选择代表

时间:2014-07-16 15:26:49

标签: qt delegates qml

我有一个listview,我想使用defaultDelegate或customDelegate,具体取决于属性的值。 到目前为止,我已尝试使用组件加载不同的代理:

 Component{
    id: delegate
    Loader {
        sourceComponent: type == 3 ? customDelegate : defaultDelegate
    }
}

但是,我无法从我的两位代表那里访问我模型中的属性。我有以下错误:

ReferenceError: name is not defined

这是我使用的模型:

ListModel {
     id: test
     ListElement {
         name: "Bill"
         team: "554"
         type: 2
     }
     ListElement {
         name: "John"
         team: "555"
         type: 3
     }
     ListElement {
         name: "Sam"
         team: "556"
         type: 1
     }
 }

有谁有任何想法,我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

当然,这是一个背景问题。在您的代码中,nameteam上下文中插入的typeListViewdelegate上下文属性对于内部组件是不可访问的您的委托,因为Loader在实例化时使用customDelegatedefaultDelegate的创建上下文作为父上下文,nameteam和{{1不要引用具有该上下文链的任何东西。 一种解决方案是将所需信息显式设置为type的属性(这是有效的,因为Loader将自身设置为正在加载的组件的上下文对象。

遵循一个工作示例:

Loader

为了进一步阅读和改进,我强烈建议您阅读this