2017-02-21 3 views
2

DelegateModelからQMLアイテムを作成することは可能ですか?ここでDelegateModelからQMLアイテムを作成する

は例DelegateModelです:挿入ListElementデータで作成されたデリゲートがあるすべてのListElementについて

Rectangle 
{ 
    objectName: "object1" 
    width: 50 
    height: 50 
    color: "#FAFAFA" 
} 
Rectangle 
{ 
    objectName: "object2" 
    width: 50 
    height: 50 
    color: "#000000" 
} 

DelegateModel 
{ 
    id: delegateModel 
    model: ListModel 
    { 
     ListElement { name: "#FAFAFA"; test: "object1" } 
     ListElement { name: "#000000"; test: "object2" } 
    } 
    delegate: Rectangle 
    { 
     objectName: test 
     width: 50 
     height: 50 
     color: name 
    } 
    Component.onCompleted: 
    { 
     Utils.var_dump(items,3) 
     items.create(0) 
     Utils.var_dump(items.get(0),3) 
    } 
} 

結果は次のようになります。

答えて

1

あなたはListViewGridViewまたはRepeaterのモデルとしてそれを使用することができますたとえばModelView

をインスタンス化するために使用可能であるものであることを行うことができます。モデルがデリゲートを単独で提供するため、Viewに代理人を指定する必要はなく、インスタンス化します。

Column { 
    Repeater { 
     model: delegateModel 
     // delegate: ... <--- Nothing here! Uses the delegate from the Model. 
    } 
} 

あなたがcreate(index)方法 - を使用する場合は、デリゲートが作成されますが、親を持たないので、それは表示されませんされます。だから、あなたはそれが示さ持って、親を設定する必要があります。

Button { 
    onClicked: { 
     for (var a = 0; a < dm.items.count; a++) { 
      var o = dm.items.create(a) 
      o.parent = r 
     } 
    } 
} 

あなたは、各エントリ/デリゲートができるよう(PackagePartsなし)DelegateModelは、複数のビューで使用できないことに、注意する必要があります同時にインスタンス化されるのは1回だけです。それを望むなら、 は、QSortFilterProxyModelを使用してフィルタリングし、好きなように独自の代理人を提供するViewsを使用することを検討してください。

関連する問題