From d0069ff8c91e0027a0a1f3ef7767dbb13e0eacc4 Mon Sep 17 00:00:00 2001 From: Luca Beldi Date: Wed, 1 Aug 2018 16:43:31 +0100 Subject: Add a method to clear the data to QStandardItemModel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After the behavior of setItemData has been changed following QTBUG-45114, QStandardItemModel was lacking an interface to clear all the data from a single index. Task-number: QTBUG-69616 Change-Id: Ide0b5bb6358439fc42c474df8b044fbace6def8d Reviewed-by: André Hartmann Reviewed-by: David Faure --- src/gui/itemmodels/qstandarditemmodel.cpp | 32 +++++++++++++++++++++++++++++++ src/gui/itemmodels/qstandarditemmodel.h | 3 +++ 2 files changed, 35 insertions(+) (limited to 'src/gui') diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp index 235bc5bd7d..a771bffa2f 100644 --- a/src/gui/itemmodels/qstandarditemmodel.cpp +++ b/src/gui/itemmodels/qstandarditemmodel.cpp @@ -930,6 +930,21 @@ void QStandardItem::setData(const QVariant &value, int role) d->model->d_func()->itemChanged(this, roles); } +/*! + \since 5.12 + Removes all the data from all roles previously set. + \sa data(), setData() +*/ +void QStandardItem::clearData() +{ + Q_D(QStandardItem); + if (d->values.isEmpty()) + return; + d->values.clear(); + if (d->model) + d->model->d_func()->itemChanged(this, QVector{}); +} + /*! Returns the item's data for the given \a role, or an invalid QVariant if there is no data for the role. @@ -2990,6 +3005,23 @@ bool QStandardItemModel::setData(const QModelIndex &index, const QVariant &value return true; } +/*! + \since 5.12 + Removes the data stored in all the roles for the given \a index. + \sa setData(), data() +*/ +bool QStandardItemModel::clearItemData(const QModelIndex &index) +{ + if (!checkIndex(index, CheckIndexOption::IndexIsValid)) + return false; + Q_D(QStandardItemModel); + QStandardItem *item = d->itemFromIndex(index); + if (!item) + return false; + item->clearData(); + return true; +} + /*! \reimp */ diff --git a/src/gui/itemmodels/qstandarditemmodel.h b/src/gui/itemmodels/qstandarditemmodel.h index 827179b31d..a9ee25da75 100644 --- a/src/gui/itemmodels/qstandarditemmodel.h +++ b/src/gui/itemmodels/qstandarditemmodel.h @@ -69,6 +69,7 @@ public: virtual QVariant data(int role = Qt::UserRole + 1) const; virtual void setData(const QVariant &value, int role = Qt::UserRole + 1); + void clearData(); inline QString text() const { return qvariant_cast(data(Qt::DisplayRole)); @@ -343,6 +344,8 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; + // Qt 6: add override keyword + bool clearItemData(const QModelIndex &index); QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; -- cgit v1.2.3