[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_OBJECT
Q_PROPERTY(QQmlListProperty<ListModel> lists READ lists)public:
enum AnimalRoles { TypeRole = Qt::UserRole + 1, }; explicit TreeModel(const QString &data, QObject *parent = 0); ~TreeModel(); 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:
TreeModel::lists
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:
TreeModel::lists@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[])
{
...qmlRegisterType<ListModel>(); ...
}@
Hope that helps.