Hi Preet,

On 10/07/2011, at 10:20 AM, ext Preet wrote:

> Hiya,
> 
> I'm trying to create a nested ListView from a simple QList model in C++, of 
> type QList<SomeType*>. The SomeType object can have children of its own type 
> as well. So each SomeType object has a QList<SomeType*> in it. Starting with 
> an 'outer list' of QList<SomeType*>s, I wanted to make a ListView in QML like 
> this:
> 
> SomeTypeA
>   child1SomeTypeA
>   child2SomeTypeA
> SomeTypeB
>   child1SomeTypeB
>   child2SomeTypeB
>   child3SomeTypeB
> ... etc.
> 
> I kept running into problems with my attempts to do this:
> * I get metatype errors when trying to convert QList<QObject*> into a 
> QVariant to have it accessible to the QML engine with Q_INVOKABLE. This 
> doesn't happen when I'm using setContextProperty in the same way... why is 
> this? 
> * I'm not sure how to get the current object from within the delegate, or 
> even if I'm approaching this the right way.
> 


A QList<QObject*> has no way of notifying the view when its contents have 
changed.  Instead you could use a QDeclarativeListProperty for the children. 
E.g.

class SomeType : public QObject
{
        Q_PROPERTY(QDeclarativeListProperty<QObject> children READ children 
NOTIFY childrenChanged)


There are some examples of using QDeclarativeListProperty in the C++ extensions 
tutorial: 
http://doc.qt.nokia.com/4.7/declarative-tutorials-extending-chapter5-listproperties.html

The inner ListView can then use "children" as its model which will reference 
the 'children' property of the current delegate object (although you might want 
to use a name other than "children" to avoid confusion with ordinary child 
items in QML).


regards,

Bea

_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.qt.nokia.com/mailman/listinfo/qt-qml

Reply via email to