From 377b4df13bb7d5bbfa588090f96269ded65351b5 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 20 Jun 2024 17:56:14 +0200 Subject: [PATCH] [doc] Q(Persistent)ModelIndex: document behavior of data() on invalid Q(P)MIs We return a default-constructed QVariant. What else could we possibly return? Right: nothing else. So document it and add a test. Pick-to: 6.7 6.5 6.2 5.15 Change-Id: If9808703b8ddfd15ceb013996741af8cd4efea12 Reviewed-by: Volker Hilsheimer (cherry picked from commit d1a5e602df5978cee6bd263db77745f8047e508e) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/itemmodels/qabstractitemmodel.cpp | 6 ++-- .../tst_qabstractitemmodel.cpp | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 216db3b42a5..5b9b215eabe 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -606,7 +606,8 @@ QModelIndex QPersistentModelIndex::sibling(int row, int column) const /*! Returns the data for the given \a role for the item referred to by the - index. + index, or a default-constructed QVariant if this persistent model index + is \l{isValid()}{invalid}. \sa Qt::ItemDataRole, QAbstractItemModel::setData() */ @@ -1315,7 +1316,8 @@ void QAbstractItemModel::resetInternalData() \fn QVariant QModelIndex::data(int role) const Returns the data for the given \a role for the item referred to by the - index. + index, or a default-constructed QVariant if this model index is + \l{isValid()}{invalid}. */ /*! diff --git a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp index c48b79b2600..8a2643c0f36 100644 --- a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp +++ b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp @@ -40,6 +40,8 @@ private slots: void parent(); void hasChildren(); void data(); + void invalidModelIndexDataReturnsInvalidQVariant(); + void invalidPersistentModelIndexDataReturnsInvalidQVariant(); void headerData(); void itemData(); void itemFlags(); @@ -390,6 +392,33 @@ void tst_QAbstractItemModel::data() QCOMPARE(model.setHeaderData(0, Qt::Horizontal, QVariant(0), 0), false); } +void tst_QAbstractItemModel::invalidModelIndexDataReturnsInvalidQVariant() +{ + const QModelIndex invalid; + QVERIFY(!invalid.isValid()); + QVERIFY(!invalid.data(Qt::ItemDataRole::DisplayRole).isValid()); + + QtTestModel model(1, 1); + const QModelIndex mi = model.index(0, 1); + QVERIFY(!mi.isValid()); + QVERIFY(!mi.data(Qt::ItemDataRole::DisplayRole).isValid()); +} + +void tst_QAbstractItemModel::invalidPersistentModelIndexDataReturnsInvalidQVariant() +{ + const QPersistentModelIndex invalid; + QVERIFY(!invalid.isValid()); + QVERIFY(!invalid.data(Qt::ItemDataRole::DisplayRole).isValid()); + + QtTestModel model(1, 1); + const QPersistentModelIndex pmi = model.index(0, 0); + QVERIFY(pmi.isValid()); + QVERIFY(pmi.data(Qt::ItemDataRole::DisplayRole).isValid()); + model.removeRows(0, 1); + QVERIFY(!pmi.isValid()); + QVERIFY(!pmi.data(Qt::ItemDataRole::DisplayRole).isValid()); +} + void tst_QAbstractItemModel::headerData() { QtTestModel model(1, 1);