summaryrefslogtreecommitdiffstats
path: root/src/gui/itemmodels/qstandarditemmodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/itemmodels/qstandarditemmodel.cpp')
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.cpp47
1 files changed, 23 insertions, 24 deletions
diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp
index 234296271b..03c7b5c152 100644
--- a/src/gui/itemmodels/qstandarditemmodel.cpp
+++ b/src/gui/itemmodels/qstandarditemmodel.cpp
@@ -968,31 +968,29 @@ void QStandardItem::clearData()
*/
QVariant QStandardItem::data(int role) const
{
- QModelRoleData result(role);
- multiData(result);
- return result.data();
+ Q_D(const QStandardItem);
+ const int r = (role == Qt::EditRole) ? Qt::DisplayRole : role;
+ for (const auto &value : d->values) {
+ if (value.role == r)
+ return value.value;
+ }
+ return QVariant();
}
-void QStandardItem::multiData(QModelRoleDataSpan roleDataSpan) const
-{
- Q_D(const QStandardItem);
+/*!
+ \since 6.0
- const auto valuesBegin = d->values.begin();
- const auto valuesEnd = d->values.end();
+ Fills the \a roleDataSpan span with the data from this item.
- for (auto &roleData : roleDataSpan) {
- const int role = (roleData.role() == Qt::EditRole) ? Qt::DisplayRole : roleData.role();
- const auto hasSameRole = [role](const QStandardItemData &data)
- {
- return data.role == role;
- };
+ The default implementation simply calls data() for each role
+ in the span.
- auto dataIt = std::find_if(valuesBegin, valuesEnd, hasSameRole);
- if (dataIt != valuesEnd)
- roleData.setData(dataIt->value);
- else
- roleData.clearData();
- }
+ \sa data()
+*/
+void QStandardItem::multiData(QModelRoleDataSpan roleDataSpan) const
+{
+ for (auto &roleData : roleDataSpan)
+ roleData.setData(data(roleData.role()));
}
/*!
@@ -2846,10 +2844,11 @@ QVariant QStandardItemModel::data(const QModelIndex &index, int role) const
*/
void QStandardItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
{
- Q_D(const QStandardItemModel);
- QStandardItem *item = d->itemFromIndex(index);
- if (item)
- item->multiData(roleDataSpan);
+ // Cannot offer a better implementation; users may be overriding
+ // data(), and thus multiData() may fall out of sync for them.
+ // The base class' implementation will simply call data() in a loop,
+ // so it's fine.
+ QAbstractItemModel::multiData(index, roleDataSpan);
}
/*!