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

QAbstractListModel with QML

$
0
0
Hello guys, I’m struggling to get my qml to work with a QAbstractListModel. I started using QList<QObject> models. That worked pretty good. Except that these don’t communicate any changes on the model. So I start implementing a QAbstractListModel approach. But it isn’t going to work. Here is my implementation: clipmodel.h #include <QObject> #include <QAbstractListModel>   #include "global_define.h" #include "elements/clipelement.h"   class ClipModel : public QAbstractListModel {     Q_OBJECT public:       enum ClipElementRoles { ObjectRole = Qt::UserRole+1 };       explicit ClipModel(QObject *parent = 0);       QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;       void addClip(ClipElement *clip);       int rowCount(const QModelIndex & parent = QModelIndex()) const;   private:     ClipList m_clips; //typedef QList<QObject*> ClipList;--   signals:   public slots:   }; clipmodel.cpp #include "clipmodel.h"   ClipModel::ClipModel(QObject *parent) :     QAbstractListModel(parent) {     QHash<int, QByteArray> roles;     roles[ObjectRole] = "object";     setRoleNames(roles); }   QVariant ClipModel::data(const QModelIndex &index, int role) const {     if (!index.isValid())         return QVariant();       if (index.row() >= m_clips.size() || index.row() < 0)         return QVariant();       if (role == Qt::DisplayRole) {         return QVariant::fromValue(this->m_clips.at(index.row()));     }       if (role == ObjectRole)         return QVariant::fromValue(this->m_clips.at(index.row())); }   void ClipModel::addClip(ClipElement *clip) {     beginInsertRows(QModelIndex(), rowCount(), rowCount());     m_clips.append(clip);     endInsertRows(); }    int ClipModel::rowCount(const QModelIndex & /* parent */) const {     return m_clips.count(); }     ClipModel *model = new ClipModel(this);       ClipElement *temp = new ClipElement();     temp->setClipID("foo");     temp->setClipStatus("bar");     model->addClip(temp);     this->viewer.rootContext()->setContextProperty("clip_model", model); The first problem with this is an build error saying: ‘setRoleNames’ was not declared in this scope Ok ? what am I doing wrong here so far ? The clipmodel is used by an ListView with the following delegate: Component {             id: clipDelegate             Item {                 id:clipContainer                 width: parent.parent.width                 height: 50                 Rectangle {                     id:clipBackground                     anchors.fill: parent                     color: "red"                     border.color: "black"                     Text {                         id: clipText                         anchors.fill: parent                         text: ??? #how to get the properties of the ClipElement ?                     }                 }             }         } I guess that without setting any role I wouldn’t be able to get the properties of the ClipElement object. But how am i supposed to set the roles and address the roles in qml ? — Is there any complete tutorial out there showing the combination of QML witch a QAbstractListModel ? I found nothing that helped me here. The Qt documentation is pretty incomplete on this topic. Thanks for help.

Viewing all articles
Browse latest Browse all 4972

Trending Articles