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);