From c3ad8c1c062a972b7fb75d8b51a1f80cb371d503 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 27 Dec 2011 17:02:33 +0100 Subject: Make the roleNames a virtual accessor. This is consistent with the rest of the API of QAbstractItemModel (which is virtual) and removes the need for code like this in the constructor (where it doesn't belong): QHash myRoleNames = roleNames(); myRoleNames.insert(Qt::UserRole + 1, "myCustomRole"); setRoleNames(myRoleNames); in favor of MyModel::roleNames() const { QHash myRoleNames = QAbstractItemModel::roleNames(); myRoleNames.insert(Qt::UserRole + 1, "myCustomRole"); return myRoleNames; } which is consistent with all other QAIM API (eg, flags()). This is a source compatible change. Change-Id: I7e1ce17f8dab2292c4c7b6dbd3c09ec71b5c793b Reviewed-by: David Faure Reviewed-by: Marius Bugge Monsen --- src/corelib/itemmodels/qabstractitemmodel.cpp | 9 +++++-- src/corelib/itemmodels/qabstractitemmodel.h | 11 +++++++-- .../qabstractitemmodel/tst_qabstractitemmodel.cpp | 28 ++++++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index f320d595e8..7e6c8baa1d 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -2132,6 +2132,7 @@ QSize QAbstractItemModel::span(const QModelIndex &) const /*! \since 4.6 + \obsolete Sets the model's role names to \a roleNames. @@ -2142,7 +2143,11 @@ QSize QAbstractItemModel::span(const QModelIndex &) const \sa roleNames() */ -void QAbstractItemModel::setRoleNames(const QHash &roleNames) + +/*! + \internal + */ +void QAbstractItemModel::doSetRoleNames(const QHash &roleNames) { Q_D(QAbstractItemModel); d->roleNames = roleNames; @@ -2155,7 +2160,7 @@ void QAbstractItemModel::setRoleNames(const QHash &roleNames) \sa setRoleNames() */ -const QHash &QAbstractItemModel::roleNames() const +QHash QAbstractItemModel::roleNames() const { Q_D(const QAbstractItemModel); return d->roleNames; diff --git a/src/corelib/itemmodels/qabstractitemmodel.h b/src/corelib/itemmodels/qabstractitemmodel.h index 0ac297e57b..8c9615f7cb 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.h +++ b/src/corelib/itemmodels/qabstractitemmodel.h @@ -222,7 +222,7 @@ public: Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const; virtual QSize span(const QModelIndex &index) const; - const QHash &roleNames() const; + virtual QHash roleNames() const; #ifdef Q_NO_USING_KEYWORD inline QObject *parent() const { return QObject::parent(); } @@ -302,9 +302,16 @@ protected: void changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to); QModelIndexList persistentIndexList() const; - void setRoleNames(const QHash &roleNames); +#if QT_DEPRECATED_SINCE(5,0) + QT_DEPRECATED void setRoleNames(const QHash &roleNames) + { + doSetRoleNames(roleNames); + } +#endif private: + void doSetRoleNames(const QHash &roleNames); + Q_DECLARE_PRIVATE(QAbstractItemModel) Q_DISABLE_COPY(QAbstractItemModel) }; diff --git a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp index 1952314ce2..fd7b0d76ba 100644 --- a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp +++ b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp @@ -112,6 +112,8 @@ private slots: void testChildrenLayoutsChanged(); + void testRoleNames(); + private: DynamicTreeModel *m_model; }; @@ -1976,5 +1978,31 @@ void tst_QAbstractItemModel::testChildrenLayoutsChanged() } } +class OverrideRoleNames : public QStringListModel +{ + Q_OBJECT +public: + OverrideRoleNames(QObject *parent = 0) + : QStringListModel(parent) + { + + } + + QHash roleNames() const + { + QHash roles = QStringListModel::roleNames(); + roles.insert(Qt::UserRole + 2, "custom"); + return roles; + } +}; + +void tst_QAbstractItemModel::testRoleNames() +{ + QAbstractItemModel *model = new OverrideRoleNames(this); + QHash roles = model->roleNames(); + QVERIFY(roles.contains(Qt::UserRole + 2)); + QVERIFY(roles.value(Qt::UserRole + 2) == "custom"); +} + QTEST_MAIN(tst_QAbstractItemModel) #include "tst_qabstractitemmodel.moc" -- cgit v1.2.3