Quantcast
Channel: Qt DevNet forums: Qt Quick 1283365070**
Viewing all articles
Browse latest Browse all 4972

QAbstractListModel & QML

$
0
0
Hello I have some problems to get my qml to work with a QAbstractListModel. Here is my code: Data.h #ifndef DATA_H #define DATA_H   #include <QAbstractListModel> #include <QApplication> #include <QDebug> #include <QHash> #include <QList> #include <QObject> #include <QVariant> #include <QVariantMap>   class Data : public QAbstractListModel {     Q_OBJECT   protected:     Data(QObject *parent);   private:     enum Role     {         Role_Name = Qt::UserRole + 1,         Role_Age     };   public:     static Data* instance();   private:     QHash<int, QByteArray> mRoleNames;     QList<QVariantMap> mItems;   public:     virtual QHash<int, QByteArray> roleNames() const;     virtual QVariant data(const QModelIndex &index, int role) const;     virtual int rowCount(const QModelIndex &) const; };   #endif // DATA_H Data.cpp #include "Data.h"   Data::Data(QObject *parent)     : QAbstractListModel(parent) {     mRoleNames[Role_Name] = "name";     mRoleNames[Role_Age]  = "age";       for (int i = 0; i < 10; ++i)     {         QVariantMap item;           item[mRoleNames[Role_Name]] = QString("Name %1").arg(i);         item[mRoleNames[Role_Age]]  = i;           mItems << item;     } }   Data *Data::instance() {     static Data *p = new Data(qApp);     return p; }   QHash<int, QByteArray> Data::roleNames() const {     return mRoleNames; }   QVariant Data::data(const QModelIndex &index, int role) const {     Q_ASSERT(index.isValid());       if ((role >= Role_Name) && (role <= Role_Age))     {         return mItems[index.row()][mRoleNames[role]];     }       return QVariant(); }   int Data::rowCount(const QModelIndex &) const {     return mItems.count(); } main.cpp #include <QApplication> #include <QQmlApplicationEngine> #include <QtQml>   #include "Data.h"   int main(int argc, char *argv[]) {     QApplication app(argc, argv);       QQmlApplicationEngine engine;     engine.rootContext()->setContextProperty("data", Data::instance());     engine.load(QUrl(QStringLiteral("qrc:///main.qml")));       return app.exec(); } main.qml import QtQuick 2.2 import QtQuick.Controls 1.1   ApplicationWindow {     visible: true     width: 300     height: 300     title: qsTr("Hello World")       ListView {         anchors.fill: parent         model: data         delegate: Text {             text: name + ", " + age         }     } } When i run the application i get this message: QQmlExpression: Expression qrc:///main.qml:68:16 depends on non-NOTIFYable properties: QQuickListView::data Also i see that no one methods of the Data class, except instance(), are called. What is wrong with my code?

Viewing all articles
Browse latest Browse all 4972

Trending Articles