Sounds like using a QAbstractListModel would be easier for you than using the QList<QObject *> approach.
I've found that using the latter is easy to get started, maybe for throwing a PoC or something, but if you really want to use model in QML from C++, it's worth implementing it with a QAbstractListModel. In the end it's not even that much more code. Or was there a reason the model had to be a QList<QObject *> thingy? Cheers, Johan > You're already on the right track here. One thing that might be > helpful is to do this in your QObject's constructor: > > QDeclarativeEngine::setObjectOwnership (this, > QDeclarativeEngine::CppOwnership); > > We also had to implement reference counting because we shared our list > objects throughout the program. > > > On Sun, Oct 9, 2011 at 8:05 PM, Pris Matic<[email protected]> > wrote: >> I'll try to answer my own question, in the hopes that it might benefit >> someone else. >> >> You definitely need to maintain those QObjects in memory on the C++ side. >> When I pushed a QList<QObject*> to the model of a ListView, and then later >> deleted the QList (using qDeleteAll), I got an instant seg fault. There's >> also some unclear behaviour as to what happens when you clear the ListView >> of all elements, and then try to delete the QList. I ran into the same >> problem (seg fault) even though the model was now pointing to something >> else. So right now I keep track of everything I send to the declarative >> engine in this manner and then delete it when I exit the program. It's not >> ideal, but it's the only solution that works for me. >> >> >> Regards, >> >> -Pris >> >> On Sat, Oct 8, 2011 at 7:21 PM, Pris Matic<[email protected]> >> wrote: >>> >>> Hi all, >>> >>> I have a question about what exactly happens when you have a >>> QList<QObject*> in your C++ code, and then you send it to QML with >>> something >>> like this: >>> >>> QVariant Abc::GetObjectList() >>> { return QVariant::fromValue(m_object_list); } >>> >>> Where m_object_list is a QList<QObject*> where the QObjects have slots >>> that can be directly invoked from QML (imagine using the list for something >>> like a ListView). >>> >>> Does the QML side of things create a copy of the list, or do I have to >>> maintain it in C++? Ie if m_object_list was cleared after 'GetObjectList' >>> was called from QML, then would the list still be valid? If I was using a >>> ListView, would the ListView need to access that QList if it needed to draw >>> offscreen delegates as they became visible, etc. >>> >>> >>> Regards, >>> >>> -Pris >> >> >> _______________________________________________ >> Qt-qml mailing list >> [email protected] >> http://lists.qt.nokia.com/mailman/listinfo/qt-qml >> >> > _______________________________________________ > Qt-qml mailing list > [email protected] > http://lists.qt.nokia.com/mailman/listinfo/qt-qml _______________________________________________ Qt-qml mailing list [email protected] http://lists.qt.nokia.com/mailman/listinfo/qt-qml
