diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp index baf7e8afc3a..3b810e64359 100644 --- a/src/widgets/itemviews/qlistwidget.cpp +++ b/src/widgets/itemviews/qlistwidget.cpp @@ -69,7 +69,7 @@ void QListModel::insert(int row, QListWidgetItem *item) if (!item) return; - item->view = qobject_cast(QObject::parent()); + item->view = this->view(); if (item->view && item->view->isSortingEnabled()) { // sorted insertion QList::iterator it; @@ -93,7 +93,7 @@ void QListModel::insert(int row, const QStringList &labels) const int count = labels.size(); if (count <= 0) return; - QListWidget *view = qobject_cast(QObject::parent()); + QListWidget *view = this->view(); if (view && view->isSortingEnabled()) { // sorted insertion for (int i = 0; i < count; ++i) { @@ -109,7 +109,7 @@ void QListModel::insert(int row, const QStringList &labels) for (int i = 0; i < count; ++i) { QListWidgetItem *item = new QListWidgetItem(labels.at(i)); item->d->theid = row; - item->view = qobject_cast(QObject::parent()); + item->view = this->view(); items.insert(row++, item); } endInsertRows(); @@ -223,7 +223,7 @@ bool QListModel::insertRows(int row, int count, const QModelIndex &parent) return false; beginInsertRows(QModelIndex(), row, row + count - 1); - QListWidget *view = qobject_cast(QObject::parent()); + QListWidget *view = this->view(); QListWidgetItem *itm = nullptr; for (int r = row; r < row + count; ++r) { @@ -387,7 +387,7 @@ void QListModel::itemChanged(QListWidgetItem *item, const QList &roles) QStringList QListModel::mimeTypes() const { - const QListWidget *view = qobject_cast(QObject::parent()); + const QListWidget *view = this->view(); if (view) return view->mimeTypes(); return {}; @@ -405,10 +405,9 @@ QMimeData *QListModel::mimeData(const QModelIndexList &indexes) const itemlist.reserve(indexesCount); for (int i = 0; i < indexesCount; ++i) itemlist << at(indexes.at(i).row()); - const QListWidget *view = qobject_cast(QObject::parent()); cachedIndexes = indexes; - QMimeData *mimeData = view->mimeData(itemlist); + QMimeData *mimeData = view()->mimeData(itemlist); cachedIndexes.clear(); return mimeData; } @@ -418,19 +417,17 @@ bool QListModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &index) { Q_UNUSED(column); - QListWidget *view = qobject_cast(QObject::parent()); if (index.isValid()) row = index.row(); else if (row == -1) row = items.size(); - return view->dropMimeData(row, data, action); + return view()->dropMimeData(row, data, action); } Qt::DropActions QListModel::supportedDropActions() const { - const QListWidget *view = qobject_cast(QObject::parent()); - return view->supportedDropActions(); + return view()->supportedDropActions(); } #endif // QT_CONFIG(draganddrop) diff --git a/src/widgets/itemviews/qlistwidget_p.h b/src/widgets/itemviews/qlistwidget_p.h index 9aa87873fe4..73bf9d509e4 100644 --- a/src/widgets/itemviews/qlistwidget_p.h +++ b/src/widgets/itemviews/qlistwidget_p.h @@ -50,6 +50,8 @@ public: QListModel(QListWidget *parent); ~QListModel(); + inline QListWidget *view() const { return qobject_cast(QObject::parent()); } + void clear(); QListWidgetItem *at(int row) const; void insert(int row, QListWidgetItem *item); diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index f23904e6fa2..5d98961b0ed 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -168,7 +168,7 @@ void QTableModel::setItem(int row, int column, QTableWidgetItem *item) oldItem->view = nullptr; delete tableItems.at(i); - QTableWidget *view = qobject_cast(QObject::parent()); + QTableWidget *view = this->view(); // set new if (item) @@ -264,7 +264,7 @@ void QTableModel::setHorizontalHeaderItem(int section, QTableWidgetItem *item) oldItem->view = nullptr; delete oldItem; - QTableWidget *view = qobject_cast(QObject::parent()); + QTableWidget *view = this->view(); if (item) { item->view = view; @@ -286,7 +286,7 @@ void QTableModel::setVerticalHeaderItem(int section, QTableWidgetItem *item) oldItem->view = nullptr; delete oldItem; - QTableWidget *view = qobject_cast(QObject::parent()); + QTableWidget *view = this->view(); if (item) { item->view = view; @@ -405,7 +405,7 @@ bool QTableModel::setData(const QModelIndex &index, const QVariant &value, int r if (!value.isValid()) return false; - QTableWidget *view = qobject_cast(QObject::parent()); + QTableWidget *view = this->view(); if (!view) return false; @@ -434,7 +434,7 @@ bool QTableModel::setItemData(const QModelIndex &index, const QMap(QObject::parent()); + QTableWidget *view = this->view(); QTableWidgetItem *itm = item(index); if (itm) { itm->view = nullptr; // prohibits item from calling itemChanged() @@ -817,8 +817,10 @@ void QTableModel::setItemPrototype(const QTableWidgetItem *item) QStringList QTableModel::mimeTypes() const { - const QTableWidget *view = qobject_cast(QObject::parent()); - return (view ? view->mimeTypes() : QStringList()); + auto v = view(); + if (v) + return v->mimeTypes(); + return {}; } QMimeData *QTableModel::internalMimeData() const @@ -833,7 +835,7 @@ QMimeData *QTableModel::mimeData(const QModelIndexList &indexes) const items.reserve(indexesCount); for (int i = 0; i < indexesCount; ++i) items << item(indexes.at(i)); - const QTableWidget *view = qobject_cast(QObject::parent()); + const QTableWidget *view = this->view(); // cachedIndexes is a little hack to avoid copying from QModelIndexList to // QList and back again in the view @@ -857,13 +859,13 @@ bool QTableModel::dropMimeData(const QMimeData *data, Qt::DropAction action, column = 0; } - QTableWidget *view = qobject_cast(QObject::parent()); + QTableWidget *view = this->view(); return (view ? view->dropMimeData(row, column, data, action) : false); } Qt::DropActions QTableModel::supportedDropActions() const { - const QTableWidget *view = qobject_cast(QObject::parent()); + const QTableWidget *view = this->view(); return (view ? view->supportedDropActions() : Qt::DropActions(Qt::IgnoreAction)); } diff --git a/src/widgets/itemviews/qtablewidget_p.h b/src/widgets/itemviews/qtablewidget_p.h index 11b9b42b2f6..0904f077c2e 100644 --- a/src/widgets/itemviews/qtablewidget_p.h +++ b/src/widgets/itemviews/qtablewidget_p.h @@ -58,6 +58,8 @@ public: QTableModel(int rows, int columns, QTableWidget *parent); ~QTableModel(); + inline QTableWidget *view() const { return qobject_cast(QObject::parent()); } + bool insertRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()) override; bool insertColumns(int column, int count = 1, const QModelIndex &parent = QModelIndex()) override;