diff options
Diffstat (limited to 'src/gui/itemmodels')
-rw-r--r-- | src/gui/itemmodels/qstandarditemmodel.cpp | 39 | ||||
-rw-r--r-- | src/gui/itemmodels/qstandarditemmodel.h | 2 |
2 files changed, 36 insertions, 5 deletions
diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp index cf905eae66..1d3dc1303f 100644 --- a/src/gui/itemmodels/qstandarditemmodel.cpp +++ b/src/gui/itemmodels/qstandarditemmodel.cpp @@ -968,13 +968,31 @@ void QStandardItem::clearData() */ QVariant QStandardItem::data(int role) const { + QModelRoleData result(role); + multiData(result); + return result.data(); +} + +void QStandardItem::multiData(QModelRoleDataSpan roleDataSpan) const +{ 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; + + const auto valuesBegin = d->values.begin(); + const auto valuesEnd = d->values.end(); + + 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; + }; + + auto dataIt = std::find_if(valuesBegin, valuesEnd, hasSameRole); + if (dataIt != valuesEnd) + roleData.setData(dataIt->value); + else + roleData.clearData(); } - return QVariant(); } /*! @@ -2826,6 +2844,17 @@ QVariant QStandardItemModel::data(const QModelIndex &index, int role) const /*! \reimp */ +void QStandardItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const +{ + Q_D(const QStandardItemModel); + QStandardItem *item = d->itemFromIndex(index); + if (item) + item->multiData(roleDataSpan); +} + +/*! + \reimp +*/ Qt::ItemFlags QStandardItemModel::flags(const QModelIndex &index) const { Q_D(const QStandardItemModel); diff --git a/src/gui/itemmodels/qstandarditemmodel.h b/src/gui/itemmodels/qstandarditemmodel.h index 3e0374d741..02274839cb 100644 --- a/src/gui/itemmodels/qstandarditemmodel.h +++ b/src/gui/itemmodels/qstandarditemmodel.h @@ -66,6 +66,7 @@ public: virtual ~QStandardItem(); virtual QVariant data(int role = Qt::UserRole + 1) const; + virtual void multiData(QModelRoleDataSpan roleDataSpan) const; virtual void setData(const QVariant &value, int role = Qt::UserRole + 1); void clearData(); @@ -331,6 +332,7 @@ public: bool hasChildren(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; bool clearItemData(const QModelIndex &index) override; |