How to use QAbstractListModel: Difference between revisions
Jump to navigation
Jump to search
(Fix broken <code> in this page :)) |
m (Fixed and normalised the append calls in the populate function of the UserModel.) |
||
Line 58: | Line 58: | ||
beginResetModel(); | beginResetModel(); | ||
mDatas.clear(); | mDatas.clear(); | ||
mDatas.append(User("Charles","Darwin", QDate(1812,22,23)); | mDatas.append(User("Charles", "Darwin", QDate(1812,22,23))); | ||
mDatas.append(User("Lars","Knoll, | mDatas.append(User("Lars", "Knoll", QDate(1976,22,12))); | ||
mDatas.append(User("Boby","Lapointe",QDate(1951,21,31)); | mDatas.append(User("Boby", "Lapointe", QDate(1951,21,31))); | ||
endResetModel(); | endResetModel(); | ||
} | } |
Latest revision as of 22:26, 1 March 2021
The following tutorial explains how to create a custom Qt model and use it inside a QTableView.
We want to display a user list. First create a simple User class as follow :
class User { public : User(); User(const QString& firstname, const QString& lastname, const QDate& birthday); private: QString mFirstname; QString mLastName; QDate mBirthday; }
We are now going to create a model based on QAbstractItemModel. A model is an interface between the view and the data. In the following example, data are a list of User.
class UserModel : public QAbstractItemModel { Q_OBJECT public : UserModel(QObject * parent = 0); int rowCount(const QModelIndex& parent = QModelIndex()) const; int columnCount(const QModelIndex& parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; void populate(); private: QList<User> mDatas; }
int UserModel::rowCount(const QModelIndex& parent = QModelIndex()) const { return mDatas.size(); } int UserModel::columnCount(const QModelIndex& parent = QModelIndex()) const { return 3; }
QVariant UserModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if ( role == Qt::DisplayRole) { if ( index.column() == 0) return mDatas[index.row()].firstname(); if ( index.column() == 1) return mDatas[index.row()].lastname(); if ( index.column() == 2) return mDatas[index.row()].birthday(); } return QVariant(); }
void UserModel::populate() { beginResetModel(); mDatas.clear(); mDatas.append(User("Charles", "Darwin", QDate(1812,22,23))); mDatas.append(User("Lars", "Knoll", QDate(1976,22,12))); mDatas.append(User("Boby", "Lapointe", QDate(1951,21,31))); endResetModel(); }
Now use your mode :
QTableView * view = new QTableView; UserModel * model = new UserModel; view->setModel(model); model->populate()