⚠️ Forum Maintenance: Feb 6th, 8am - 14pm (UTC+2)

[SOLVED] how to assign a QList<listmodelObjects> to a listview in QML with QQmlListProperty?

  • if i have a class that contains a QList of listmodels (QList<listmodelobjects>), how would i assign a model from that list to a listview in QML?

    class code:
    @class TreeModel : public QAbstractItemModel
    Q_PROPERTY(QQmlListProperty<ListModel> lists READ lists)


    enum AnimalRoles {
        TypeRole = Qt::UserRole + 1,
    explicit TreeModel(const QString &data, QObject *parent = 0);
    QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
    Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
    QVariant headerData(int section, Qt::Orientation orientation,
                        int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
    QModelIndex index(int row, int column,
                      const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
    QModelIndex parent(const QModelIndex &index) const Q_DECL_OVERRIDE;
    int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
    int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
    QStringList getGroups();
    QStringList getFoldersByGroup(const QString &name);
    QStringList getFolderlistByGroupID(QStringList &name);
    void getFolders();
    void populateFrontPage();
    QQmlListProperty<ListModel> lists(){
            return QQmlListProperty<ListModel>(this, foldermodels);
    ListModel *groupmodel;
    QList<ListModel*> foldermodels;
    QList<ListModel*> filemodels;@

    now how would i assign for example, foldermodels.at(0) to a listview in qml?
    i have tried stuff like:
    ListView {
    id: folderlist
    model: treemodel.lists // treemodel.lists.at(0) // treemodel.lists[0]
    delegate: folderDelegate
    contentHeight: contentItem.childrenRect.height
    height: childrenRect.height
    anchors.left: parent.left
    anchors.right: parent.right
    clip: true

    but i am getting errors like:

    @QMetaProperty::read: Unable to handle unregistered datatype 'QQmlListProperty<ListModel>' for property 'TreeModel::lists'
    QQmlExpression: Expression qrc:/main.qml:54:28 depends on non-NOTIFYable properties:
    QMetaProperty::read: Unable to handle unregistered datatype 'QQmlListProperty<ListModel>' for property 'TreeModel::lists'
    QQmlExpression: Expression qrc:/main.qml:54:28 depends on non-NOTIFYable properties:

    and yes i have registered the Treemodel class containing the QList<modelObjects>.

    i also know the QList is actually populated with the correct models because the view shows the items when i do it like this in main.cpp

    TreeModel model(infile.readAll());
    ListModel *foldermodel = model.foldermodels.at(1) // or (0)
    ctxt->setContextProperty("treemodel", &model);
    ctxt->setContextProperty("foldermodel", foldermodel);@

    Thanks in advance for the help, i really apreciate it!!

  • The error message indicates the error comes from line 54 which I don't see. Further it makes me think the code needs a notifiable type and you have the property set only for READ. I posted in your earlier question an offer for a VIP pass to my latest course which I think might help if you're new to integrating Qt Quick with C++.

  • I think the problem is that the class ListModel is not registered with the QML type system.

    You can register it using "qmlRegisterType":http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterType:
    #include <QtQml>

    int main(int argc, char *argv[])



    Hope that helps.

  • juddster!! thanks! that did the trick.. now on to the next problem lol :P

    thanks again!

Log in to reply