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_castRealModel*(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