summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSona Kurazyan <sona.kurazyan@qt.io>2021-01-25 14:49:44 +0100
committerSona Kurazyan <sona.kurazyan@qt.io>2021-01-26 21:48:00 +0100
commitba62256c5a554be1859e756bd89fc7a031341c86 (patch)
treeff51cca32d87243e74b4dfa046eba7f6f183eb56
parent709a0942aa5adeea8057a92a301dee85fc575528 (diff)
Port QStandardItemModel to the new property system
Task-number: QTBUG-85520 Task-number: QTBUG-85521 Change-Id: I2f9bbe8bc06838fcbadd446e111fb697120f550c Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.cpp10
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.h3
-rw-r--r--src/gui/itemmodels/qstandarditemmodel_p.h2
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp17
4 files changed, 27 insertions, 5 deletions
diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp
index 234296271b..8ae5a3bf6c 100644
--- a/src/gui/itemmodels/qstandarditemmodel.cpp
+++ b/src/gui/itemmodels/qstandarditemmodel.cpp
@@ -420,9 +420,7 @@ void QStandardItemPrivate::setModel(QStandardItemModel *mod)
\internal
*/
QStandardItemModelPrivate::QStandardItemModelPrivate()
- : root(new QStandardItem),
- itemPrototype(nullptr),
- sortRole(Qt::DisplayRole)
+ : root(new QStandardItem), itemPrototype(nullptr)
{
root->setFlags(Qt::ItemIsDropEnabled);
}
@@ -2821,6 +2819,12 @@ void QStandardItemModel::setSortRole(int role)
d->sortRole = role;
}
+QBindable<int> QStandardItemModel::bindableSortRole()
+{
+ Q_D(QStandardItemModel);
+ return &d->sortRole;
+}
+
/*!
\reimp
*/
diff --git a/src/gui/itemmodels/qstandarditemmodel.h b/src/gui/itemmodels/qstandarditemmodel.h
index 02274839cb..66ae3a27cd 100644
--- a/src/gui/itemmodels/qstandarditemmodel.h
+++ b/src/gui/itemmodels/qstandarditemmodel.h
@@ -314,7 +314,7 @@ class QStandardItemModelPrivate;
class Q_GUI_EXPORT QStandardItemModel : public QAbstractItemModel
{
Q_OBJECT
- Q_PROPERTY(int sortRole READ sortRole WRITE setSortRole)
+ Q_PROPERTY(int sortRole READ sortRole WRITE setSortRole BINDABLE bindableSortRole)
public:
explicit QStandardItemModel(QObject *parent = nullptr);
@@ -404,6 +404,7 @@ public:
int sortRole() const;
void setSortRole(int role);
+ QBindable<int> bindableSortRole();
QStringList mimeTypes() const override;
QMimeData *mimeData(const QModelIndexList &indexes) const override;
diff --git a/src/gui/itemmodels/qstandarditemmodel_p.h b/src/gui/itemmodels/qstandarditemmodel_p.h
index 486006f70c..8a9a2c8d50 100644
--- a/src/gui/itemmodels/qstandarditemmodel_p.h
+++ b/src/gui/itemmodels/qstandarditemmodel_p.h
@@ -247,7 +247,7 @@ public:
QHash<int, QByteArray> roleNames;
QScopedPointer<QStandardItem> root;
const QStandardItem *itemPrototype;
- int sortRole;
+ Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(QStandardItemModelPrivate, int, sortRole, Qt::DisplayRole)
};
QT_END_NAMESPACE
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
index f046ff9512..343150d25d 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
@@ -106,6 +106,7 @@ private slots:
void sort();
void sortRole_data();
void sortRole();
+ void sortRoleBindings();
void findItems();
void getSetHeaderItem();
void indexFromItem();
@@ -905,6 +906,22 @@ void tst_QStandardItemModel::sortRole()
}
}
+void tst_QStandardItemModel::sortRoleBindings()
+{
+ QStandardItemModel model;
+ QCOMPARE(model.sortRole(), Qt::DisplayRole);
+
+ QProperty<int> sortRole;
+ model.bindableSortRole().setBinding(Qt::makePropertyBinding(sortRole));
+ sortRole = Qt::UserRole;
+ QCOMPARE(model.sortRole(), Qt::UserRole);
+
+ QProperty<int> sortRoleObserver;
+ sortRoleObserver.setBinding([&] { return model.sortRole(); });
+ model.setSortRole(Qt::EditRole);
+ QCOMPARE(sortRoleObserver, Qt::EditRole);
+}
+
void tst_QStandardItemModel::findItems()
{
QStandardItemModel model;