Hi, On Fri, Apr 17, 2015 at 12:09 PM, François K. <daithe...@free.fr> wrote: > 1/ The first one is to build a Model that would inherit from > QAbstractListModel. > In the constructor, I would add the first 6 items (hard-code them).
maybe this code can give you some inspiration to solve at least some part of your problem: -------------- prefixmodel.h #ifndef PREFIXMODEL_h #define PREFIXMODEL_h #include <QAbstractProxyModel> class RealModel; class PrefixModel : public QAbstractProxyModel { Q_OBJECT public: explicit PrefixModel(QObject *parent = 0); int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent) const { return 1; } QModelIndex parent(const QModelIndex &) const { return QModelIndex(); } QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; QModelIndex mapToSource(const QModelIndex &proxyIndex) const; void setRealModel(RealModel *sourceModel) private slots: void sourceRowsInserted(const QModelIndex &, int, int); void sourceRowsRemoved(const QModelIndex &, int, int); void sourceRowsAboutToBeInserted(const QModelIndex &, int, int); void sourceRowsAboutToBeRemoved(const QModelIndex &, int, int); void sourceReset(); QVariant data(const QModelIndex &proxyIndex, int role) const; }; #endif // PREFIXMODEL_h -------------- prefixmodel.cpp #include "prefixmodel.h" #incldue "realmodel.h" #define FIX_ITEMS 6 PrefixModel::PrefixModel(QObject *parent) : QAbstractProxyModel(parent) { } QModelIndex PrefixModel::mapFromSource(const QModelIndex &sourceIndex) const { return sourceModel()->index(sourceIndex.row() + FIX_ITEMS, sourceIndex.column()); } QModelIndex PrefixModel::mapToSource(const QModelIndex &proxyIndex) const { if (!sourceModel()) return QModelIndex(); return sourceModel()->index(proxyIndex.row() - FIX_ITEMS, proxyIndex.column()); } QVariant PrefixModel::data(const QModelIndex &proxyIndex, int role) const { if (proxyIndex.row() < FIX_ITEMS) { if (role == Qt::DisplayRole) return QString("fix item #%1").arg(proxyIndex.row()); return QVariant(); } return QAbstractProxyModel::data(proxyIndex, role); } int PrefixModel::rowCount(const QModelIndex &parent) const { if (!sourceModel()) return 0; return sourceModel()->rowCount(parent) + FIX_ITEMS; } QModelIndex PrefixModel::index(int row, int column, const QModelIndex &parent) const { return createIndex(row, column, 0); } void PrefixModel::setRealModel(RealModel *sourceModel) { if (this->sourceModel() == sourceModel) return; if (this->sourceModel()) this->sourceModel()->disconnect(this); QAbstractProxyModel::setSourceModel(sourceModel); emit sourceModelChanged(); connect(sourceModel, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), this, SLOT(sourceRowsAboutToBeInserted(QModelIndex,int,int))); connect(sourceModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(sourceRowsInserted(QModelIndex,int,int))); connect(sourceModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), this, SLOT(sourceRowsAboutToBeRemoved(QModelIndex,int,int))); connect(sourceModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(sourceRowsRemoved(QModelIndex,int,int))); connect(sourceModel, SIGNAL(modelReset()), this, SLOT(sourceReset())); } RealModel *PrefixModel::sourceModelInternal() const { return qobject_cast<RealModel*>(QAbstractProxyModel::sourceModel()); } void PrefixModel::sourceRowsInserted(const QModelIndex &, int start, int end) { endInsertRows(); } void PrefixModel::sourceRowsRemoved(const QModelIndex &, int start, int end) { endRemoveRows(); } void PrefixModel::sourceRowsAboutToBeInserted(const QModelIndex &, int start, int end) { beginInsertRows(QModelIndex(), start + FIX_ITEMS, end + FIX_ITEMS); } void PrefixModel::sourceRowsAboutToBeRemoved(const QModelIndex &, int start, int end) { beginRemoveRows(QModelIndex(), start + FIX_ITEMS, end + FIX_ITEMS); } void PrefixModel::sourceReset() { beginResetModel(); endResetModel(); } Nils _______________________________________________ SailfishOS.org Devel mailing list To unsubscribe, please send a mail to devel-unsubscr...@lists.sailfishos.org