Den 9 juni 2016 8:20 fm skrev "Elvis Stansvik" <elvst...@gmail.com>: > > 2016-06-09 7:54 GMT+02:00 Elvis Stansvik <elvst...@gmail.com>: > > 2016-06-08 23:59 GMT+02:00 Jason H <jh...@gmx.com>: > >> I'm coming into this late, but can't you just set up: > >> > >> Item { // delegate > >> > >> Item { > >> id: view1 > >> visible: some_data_item_property == true > >> } > >> Item { > >> id: view2 > >> visible: !view1.visible > >> } > >> } > >> > >> Then make view1 and view2 your different delegates? You're just going after > >> two diferent views, right? > > > > Well it's ~5, but indeed that seems to work great! A little test: > > > > > > import QtQuick 2.4 > > import QtQuick.Window 2.2 > > > > import "." > > > > Window { > > title: "Test" > > width: 600 > > height: 900 > > visible: true > > > > ListModel { > > id: listModel > > dynamicRoles: true > > Component.onCompleted: { > > append({ > > "type": "color", > > "name": "foo", > > "value": "red" > > }); > > append({ > > "type": "flag", > > "name": "bar", > > "value": false > > }); > > append({ > > "type": "choice", > > "name": "bar", > > "value": "Foo", > > "choices": ["Foo", "Bar"] > > }); > > } > > } > > > > ListView { > > anchors.fill: parent > > > > model: listModel > > delegate: Rectangle { > > implicitHeight: { > > if (type === "color") > > return colorDelegate.implicitHeight > > if (type === "flag") > > return flagDelegate.implicitHeight > > if (type === "choice") > > return choiceDelegate.implicitHeight > > } > > Text { > > id: colorDelegate > > text: value + " (color)" > > visible: type === "color" > > } > > Text { > > id: flagDelegate > > text: value + " (flag)" > > visible: type === "flag" > > } > > Text { > > id: choiceDelegate > > text: value + " (choice)" > > visible: type === "choice" > > } > > } > > } > > } > > > > It does not really solve the "problem" though. Say one of my delegates > is a ColorDelegate for when the item represents a color, and I want to > provide editing (my model has a setColor(index, color)). > > I will then have to use parent.ListView.view.model.setColor(index,
Another reason I have for accessing view through the ListView attached property is getting the view width, since I want some of my delegates to stretch across the full width of the view, and to do that I have to use parent.ListView.view.width, thus assuming that the parent is the real delegate. It would have been convenient if the view itself was directly accessible in the delegate and its children, in the same way as the index is, instead of as an attached property on the delegate. Elvis > color), thereby tying the color delegate to this way of working: It > can't be reused in another context where I have a model known to > consist of only colors (well not without artificially nesting it > inside something else, like an invisible Rectangle, so that the > reference to setColor works). > > On the C++ side, it's a bit easier to make delegates that are reusable > in these two situations, since you work with createEditor and friends > instead. > > Elvis > > > > > I wonder why I haven't seen this approach before while searching around. > > > > Elvis > > > >> > >> Sent: Wednesday, June 08, 2016 at 11:49 AM > >> From: "Elvis Stansvik" <elvst...@gmail.com> > >> To: "Kristoffersen, Even (NO14)" <even.kristoffer...@honeywell.com>, > >> "interest@qt-project.org Interest" <interest@qt-project.org> > >> > >> Subject: Re: [Interest] Awkwardness of delegates in heterogenous ListViews > >> > >> 2016-06-08 15:41 GMT+02:00 Kristoffersen, Even (NO14) > >> <even.kristoffer...@honeywell.com>: > >>> Have you tried something like this in the delegate? > >>> > >>> property alias some_descriptive_name: parent > >> > >> It seems it's not allowed to use parent as the target of an alias (?): > >> > >> file:///home/estan/qte/qte/qml/ItemDelegate.qml:5 Invalid alias reference. > >> Unable to find id "parent" > >> > >> And this would still tie my "subdelegates" to this structure. They could not > >> be reused in other places, where lists are homogenous and I'm not using the > >> Loader approach. > >> > >> But I guess there's really no way to make a delegate that can be used in > >> both the "normal" situation and in the indirect-through-Loader approach. > >> > >> Elvis > >> > >>> > >>> (Not tested, just an idea) > >>> > >>> -Even > >>> > >>> -----Original Message----- > >>> From: Interest > >>> [mailto:interest-bounces+even.kristoffersen= honeywell....@qt-project.org] On > >>> Behalf Of Elvis Stansvik > >>> Sent: 8. juni 2016 15:34 > >>> To: interest@qt-project.org Interest <interest@qt-project.org> > >>> Subject: Re: [Interest] Awkwardness of delegates in heterogenous ListViews > >>> > >>> 2016-06-08 15:32 GMT+02:00 Elvis Stansvik <elvst...@gmail.com>: > >>>> Hi all, > >>>> > >>>> I'm currently using a "type" role in my items and then a Loader as > >>>> delegate, to give a level of indirection and let me choose the actual > >>>> delegate based on the "type" of the item. > >>>> > >>>> This explains it better (from my ListView): > >>>> > >>>> delegate: Loader { > >>>> sourceComponent: { > >>>> switch (type) { > >>>> case "color": > >>>> return colorDelegate > >>>> case "flag": > >>>> return flagDelegate > >>>> ... > >>>> } > >>>> } > >>>> > >>>> Component { > >>>> id: colorDelegate > >>>> > >>>> ColorDelegate { } > >>>> } > >>>> > >>>> Component { > >>>> id: flagDelegate > >>>> > >>>> FlagDelegate { } > >>>> } > >>>> > >>>> ... > >>>> } > >>>> > >>>> What I don't like with this approach is that inside my delegates, e.g. > >>>> ColorDelegate.qml, I have to use parent.ListView.view.model to get a > >>> > >>> I should clarify: I have to use this notation since it is the parent (the > >>> Loader) which is the real delegate and has the ListView attached properties. > >>> > >>> Elvis > >>> > >>>> reference to the model (needed for editing operations). The use of > >>>> "parent" here assumes a certain layout, but I see no other way :( > >>>> > >>>> How have others solved the issue of delegates for heterogenous lists? > >>>> > >>>> Best regards, > >>>> Elvis > >>> _______________________________________________ > >>> Interest mailing list > >>> Interest@qt-project.org > >>> http://lists.qt-project.org/mailman/listinfo/interest > >> > >> _______________________________________________ Interest mailing list > >> Interest@qt-project.org > >> http://lists.qt-project.org/mailman/listinfo/interest
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest