diff options
Diffstat (limited to 'src/widgets/itemviews/qlistwidget.cpp')
-rw-r--r-- | src/widgets/itemviews/qlistwidget.cpp | 56 |
1 files changed, 45 insertions, 11 deletions
diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp index 6c4746e086..1fedad80aa 100644 --- a/src/widgets/itemviews/qlistwidget.cpp +++ b/src/widgets/itemviews/qlistwidget.cpp @@ -189,8 +189,9 @@ int QListModel::rowCount(const QModelIndex &parent) const return parent.isValid() ? 0 : items.count(); } -QModelIndex QListModel::index(QListWidgetItem *item) const +QModelIndex QListModel::index(const QListWidgetItem *item_) const { + QListWidgetItem *item = const_cast<QListWidgetItem *>(item_); if (!item || !item->view || static_cast<const QListModel *>(item->view->model()) != this || items.isEmpty()) return QModelIndex(); @@ -411,10 +412,10 @@ QList<QListWidgetItem*>::iterator QListModel::sortedInsertionIterator( return std::lower_bound(begin, end, item, QListModelGreaterThan()); } -void QListModel::itemChanged(QListWidgetItem *item) +void QListModel::itemChanged(QListWidgetItem *item, const QVector<int> &roles) { - QModelIndex idx = index(item); - emit dataChanged(idx, idx); + const QModelIndex idx = index(item); + emit dataChanged(idx, idx, roles); } QStringList QListModel::mimeTypes() const @@ -710,8 +711,12 @@ void QListWidgetItem::setData(int role, const QVariant &value) } if (!found) d->values.append(QWidgetItemData(role, value)); - if (QListModel *model = (view ? qobject_cast<QListModel*>(view->model()) : 0)) - model->itemChanged(this); + if (QListModel *model = (view ? qobject_cast<QListModel*>(view->model()) : nullptr)) { + const QVector<int> roles((role == Qt::DisplayRole) ? + QVector<int>({Qt::DisplayRole, Qt::EditRole}) : + QVector<int>({role})); + model->itemChanged(this, roles); + } } /*! @@ -953,7 +958,8 @@ QDataStream &operator>>(QDataStream &in, QListWidgetItem &item) \sa Qt::ItemFlags */ -void QListWidgetItem::setFlags(Qt::ItemFlags aflags) { +void QListWidgetItem::setFlags(Qt::ItemFlags aflags) +{ itemFlags = aflags; if (QListModel *model = (view ? qobject_cast<QListModel*>(view->model()) : 0)) model->itemChanged(this); @@ -1196,7 +1202,7 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft, new current item and the item that was previously current. \sa QListWidgetItem, QListView, QTreeView, {Model/View Programming}, - {Config Dialog Example} + {Tab Dialog Example} */ /*! @@ -1619,7 +1625,7 @@ void QListWidget::editItem(QListWidgetItem *item) Opens an editor for the given \a item. The editor remains open after editing. - \sa closePersistentEditor() + \sa closePersistentEditor(), isPersistentEditorOpen() */ void QListWidget::openPersistentEditor(QListWidgetItem *item) { @@ -1631,7 +1637,7 @@ void QListWidget::openPersistentEditor(QListWidgetItem *item) /*! Closes the persistent editor for the given \a item. - \sa openPersistentEditor() + \sa openPersistentEditor(), isPersistentEditorOpen() */ void QListWidget::closePersistentEditor(QListWidgetItem *item) { @@ -1641,6 +1647,20 @@ void QListWidget::closePersistentEditor(QListWidgetItem *item) } /*! + \since 5.10 + + Returns whether a persistent editor is open for item \a item. + + \sa openPersistentEditor(), closePersistentEditor() +*/ +bool QListWidget::isPersistentEditorOpen(QListWidgetItem *item) const +{ + Q_D(const QListWidget); + const QModelIndex index = d->listModel()->index(item); + return QAbstractItemView::isPersistentEditorOpen(index); +} + +/*! \since 4.1 Returns the widget displayed in the given \a item. @@ -1931,14 +1951,28 @@ QList<QListWidgetItem*> QListWidget::items(const QMimeData *data) const /*! Returns the QModelIndex associated with the given \a item. + + \note In Qt versions prior to 5.10, this function took a non-\c{const} \a item. */ -QModelIndex QListWidget::indexFromItem(QListWidgetItem *item) const +QModelIndex QListWidget::indexFromItem(const QListWidgetItem *item) const { Q_D(const QListWidget); return d->listModel()->index(item); } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +/*! + \internal + \obsolete + \overload +*/ +QModelIndex QListWidget::indexFromItem(QListWidgetItem *item) const +{ + return indexFromItem(const_cast<const QListWidgetItem *>(item)); +} +#endif + /*! Returns a pointer to the QListWidgetItem associated with the given \a index. */ |