[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 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() \sa Qt::ItemDataRole, QAbstractItemModel::setData()
*/ */
@ -1315,7 +1316,8 @@ void QAbstractItemModel::resetInternalData()
\fn QVariant QModelIndex::data(int role) const \fn QVariant QModelIndex::data(int role) const
Returns the data for the given \a role for the item referred to by the 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 parent();
void hasChildren(); void hasChildren();
void data(); void data();
void invalidModelIndexDataReturnsInvalidQVariant();
void invalidPersistentModelIndexDataReturnsInvalidQVariant();
void headerData(); void headerData();
void itemData(); void itemData();
void itemFlags(); void itemFlags();
@ -390,6 +392,33 @@ void tst_QAbstractItemModel::data()
QCOMPARE(model.setHeaderData(0, Qt::Horizontal, QVariant(0), 0), false); 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() void tst_QAbstractItemModel::headerData()
{ {
QtTestModel model(1, 1); QtTestModel model(1, 1);