[Qt-interest] [Qt-qml] hasChildren attribute for Qml Model?
Stephen Kelly
steveire at gmail.com
Wed Apr 21 12:53:18 CEST 2010
Martin Jones wrote:
> I've added a hasModelChildren property to the delegate and a couple of
> helper functions to VisualDataModel:
>
> - VisualDataModel::modelIndex(int) returns a QModelIndex which can be
> assigned to VisualDataModel::rootIndex
> - VisualDataModel::parentModelIndex() returns a QModelIndex which can be
> assigned to VisualDataModel::rootIndex
Nice. :)
>
> which simplifies the previously mentioned example to:
>
> // main.cpp
> int main(int argc, char ** argv)
> {
> QApplication app(argc, argv);
> QDeclarativeView view;
>
> QDirModel model;
> view.rootContext()->setContextProperty("myModel", &model);
>
> view.setSource(QUrl("qrc:view.qml"));
> view.show();
>
> return app.exec();
> }
>
> #include "main.moc"
>
> // view.qml
> import Qt 4.7
>
> ListView {
> id: view
> width: 200
> height: 200
> model: VisualDataModel {
> model: myModel
> delegate: Component {
> Rectangle {
> height: 25; width: 200
> Text { text: filePath }
> MouseArea {
> anchors.fill: parent;
> onClicked: if (hasModelChildren) view.model.rootIndex
> =
> view.model.modelIndex(index)
> }
> }
> }
> }
> }
>
>
> Martin.
>
> On Tue, 20 Apr 2010 08:34:34 pm ext Stephen Kelly wrote:
>> Martin Jones wrote:
>> > On Tue, 20 Apr 2010 07:56:17 pm ext Stephen Kelly wrote:
>> >> Martin Jones wrote:
>> >> > On Mon, 19 Apr 2010 10:09:17 pm ext Stephen Kelly wrote:
>> >> >> In QTreeView, that's a [+] which you can click to expand.
>> >> >
>> >> > You could add a Q_INVOKABLE method to your model to get the child
>> >> > count, similar to the setRoot() method in this example:
>> >> >
>> >> > http://qt.nokia.com/doc/4.7-snapshot/qml-
>>
>> visualdatamodel.html#rootIndex-
>>
>> >> prop
>> >>
>> >>
>> >>
>> >> Indeed, however, it gets complicated when an intermediate proxy model
>> >> filters out all the children.
>> >>
>> >> That is common in my case because it is something like a filesystem
>> >> where on one side is the folder structure and on the other side is the
>> >> files in the selected folder. In the view that is showing only the
>> >> folder structure, hasChildren is true only if it has subfolders. Files
>> >> are already filtered out.
>> >>
>> >> First I put a method similar to what you describe in the proxy
>> >> actually sent into the qml environment, but then when I added another
>> >> proxy I had to move the logic to that class. That's not a good
>> >> solution.
>> >>
>> >> Currently I have an invokable method in a globally accessible
>> >> application object to figure out if the correct proxy hasChildren at a
>> >> particular row. The method will have to be updated if ever the
>> >> application changes. It's a bit too much magic for me, so the best
>> >> place for a solution is further down the stack in Qt.
>> >
>> > We'll add something along the lines of a "hasChildren" property to the
>> > delegate.
>>
>> Awesome, thanks.
>> _______________________________________________
>> Qt-qml mailing list
>> Qt-qml at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-qml
>
More information about the Qt-interest-old
mailing list