Accessing C++ QLists from QML
I came across this question while trying to fix a similar problem, where I wanted to use C++ code as a model source in QML. The answer given by TheBootroo pointed me in the right direction, but did not work fully for me. I do not have enough reputation to answer him directly (but I did upvote his answer).
I am using Qt 5.0.0 I found this link very helpful
The definition of ThingManager should be changed as follows
class ThingManager : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<QObject*> things READ getThings NOTIFY thingsChanged)
public:
QList<QObject*> getThings () const { return m_things; }
signals:
void thingsChanged ();
private:
QList<QObject*> m_things;
};
Note that I changed the return type of getThings to a QList<QObject*>. Without this change, Qt warns that it is "Unable to handle unregistered datatype 'QList<Thing*>'".
In the QML code, the properties of Thing can be accessed through the model as model.modelData.size and model.modelData.name.
Alternatively, You can use QVariantList
(QList<QVariant>
), it will automatically change to JavaScript array when passed to QML, and it is read and write-able from C++ and QML