[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 <volker.hilsheimer@qt.io>
(cherry picked from commit d1a5e602df5978cee6bd263db77745f8047e508e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Marc Mutz 2024-06-20 17:56:14 +02:00 committed by Qt Cherry-pick Bot
parent 072316ccc4
commit 377b4df13b
2 changed files with 33 additions and 2 deletions

View File

@ -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}.
*/
/*!

View File

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