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

Filter QML Model

$
0
0
Hi jens, I’ve tried to port my QAbstractListModel to a QSortFilterProxyModel. But it keeps crashing as soon as i try to set data or accessing the ClipList m_clips member in any way. Can the QSortFilterProxyModel provide more than one filtered model based on one set of data ? For example I need two lists based on the same model both with a different filter aktive. class CoreEngine;   class ClipFilterModel : public QSortFilterProxyModel {     Q_OBJECT   public:     ClipFilterModel(CoreEngine *parent = 0);       enum Roles {ObjectRole = Qt::UserRole, Fklz};       QHash<int, QByteArray> roleNames() const {         QHash<int, QByteArray> roles;         roles[ObjectRole] = "object";         roles[Fklz] = "fklz";         return roles;     }       QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;       void addClip(ClipElement *clip);       int rowCount(const QModelIndex & parent = QModelIndex()) const;     void clear();       inline ClipList *getModelClipList() {return &this->m_clips;}       bool loadClipList();     private:     ClipList m_clips;       CoreEngine *core;   }; .cpp #include "clipfiltermodel.h"   #include <QtWidgets>   //! [0] ClipFilterModel::ClipFilterModel(CoreEngine *parent)     : QSortFilterProxyModel(parent) {     this->core = parent; }     QVariant ClipFilterModel::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 == Fklz)         return QVariant::fromValue(this->m_clips.at(index.row())->getFklz());     else         return QVariant::fromValue(this->m_clips.at(index.row()));   }   void ClipFilterModel::addClip(ClipElement *clip) {     beginInsertRows(QModelIndex(), rowCount(), rowCount());     m_clips.append(clip);     endInsertRows(); }    int ClipFilterModel::rowCount(const QModelIndex & /* parent */) const {     return m_clips.count(); }   void ClipFilterModel::clear() {     beginResetModel();     this->m_clips.clear();     endResetModel(); }   bool ClipFilterModel::loadClipList() {     beginResetModel();     this->clear();     this->m_clips.append(this->core->getDBHandle()->getClipList());     endResetModel();     return true; }

Viewing all articles
Browse latest Browse all 4972

Trending Articles