diff options
Diffstat (limited to 'src/widgets/itemviews')
30 files changed, 154 insertions, 75 deletions
diff --git a/src/widgets/itemviews/itemviews.pri b/src/widgets/itemviews/itemviews.pri index 2bbf7ac1ff..245962d35f 100644 --- a/src/widgets/itemviews/itemviews.pri +++ b/src/widgets/itemviews/itemviews.pri @@ -4,6 +4,7 @@ HEADERS += \ itemviews/qabstractitemview.h \ itemviews/qabstractitemview_p.h \ itemviews/qheaderview.h \ + itemviews/qheaderview_p.h \ itemviews/qlistview.h \ itemviews/qlistview_p.h \ itemviews/qbsptree_p.h \ diff --git a/src/widgets/itemviews/qabstractitemdelegate.cpp b/src/widgets/itemviews/qabstractitemdelegate.cpp index 6efe5ccb71..c2dd1ec8fd 100644 --- a/src/widgets/itemviews/qabstractitemdelegate.cpp +++ b/src/widgets/itemviews/qabstractitemdelegate.cpp @@ -455,6 +455,12 @@ bool QAbstractItemDelegatePrivate::editorEventFilter(QObject *object, QEvent *ev if (editorHandlesKeyEvent(editor, keyEvent)) return false; + if (keyEvent->matches(QKeySequence::Cancel)) { + // don't commit data + emit q->closeEditor(editor, QAbstractItemDelegate::RevertModelCache); + return true; + } + switch (keyEvent->key()) { case Qt::Key_Tab: if (tryFixup(editor)) { @@ -479,10 +485,6 @@ bool QAbstractItemDelegatePrivate::editorEventFilter(QObject *object, QEvent *ev QMetaObject::invokeMethod(q, "_q_commitDataAndCloseEditor", Qt::QueuedConnection, Q_ARG(QWidget*, editor)); return false; - case Qt::Key_Escape: - // don't commit data - emit q->closeEditor(editor, QAbstractItemDelegate::RevertModelCache); - return true; default: return false; } @@ -509,7 +511,7 @@ bool QAbstractItemDelegatePrivate::editorEventFilter(QObject *object, QEvent *ev emit q->closeEditor(editor, QAbstractItemDelegate::NoHint); } } else if (event->type() == QEvent::ShortcutOverride) { - if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) { + if (static_cast<QKeyEvent*>(event)->matches(QKeySequence::Cancel)) { event->accept(); return true; } diff --git a/src/widgets/itemviews/qabstractitemdelegate.h b/src/widgets/itemviews/qabstractitemdelegate.h index c250179087..b29717d1e1 100644 --- a/src/widgets/itemviews/qabstractitemdelegate.h +++ b/src/widgets/itemviews/qabstractitemdelegate.h @@ -63,7 +63,7 @@ public: RevertModelCache }; - explicit QAbstractItemDelegate(QObject *parent = 0); + explicit QAbstractItemDelegate(QObject *parent = Q_NULLPTR); virtual ~QAbstractItemDelegate(); // painting @@ -113,7 +113,7 @@ Q_SIGNALS: void sizeHintChanged(const QModelIndex &); protected: - QAbstractItemDelegate(QObjectPrivate &, QObject *parent = 0); + QAbstractItemDelegate(QObjectPrivate &, QObject *parent = Q_NULLPTR); private: Q_DECLARE_PRIVATE(QAbstractItemDelegate) Q_DISABLE_COPY(QAbstractItemDelegate) diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 2caf5d1eb3..c5601b63b2 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -1882,8 +1882,7 @@ void QAbstractItemView::mouseDoubleClickEvent(QMouseEvent *event) || (d->pressedIndex != index)) { QMouseEvent me(QEvent::MouseButtonPress, event->localPos(), event->windowPos(), event->screenPos(), - event->button(), event->buttons(), event->modifiers()); - QGuiApplicationPrivate::setMouseEventSource(&me, event->source()); + event->button(), event->buttons(), event->modifiers(), event->source()); mousePressEvent(&me); return; } @@ -2386,7 +2385,7 @@ void QAbstractItemView::keyPressEvent(QKeyEvent *event) } #endif break; -#ifdef Q_OS_MAC +#ifdef Q_OS_OSX case Qt::Key_Enter: case Qt::Key_Return: // Propagate the enter if you couldn't edit the item and there are no @@ -2416,7 +2415,7 @@ void QAbstractItemView::keyPressEvent(QKeyEvent *event) selectAll(); break; } -#ifdef Q_OS_MAC +#ifdef Q_OS_OSX if (event->key() == Qt::Key_O && event->modifiers() & Qt::ControlModifier && currentIndex().isValid()) { emit activated(currentIndex()); break; @@ -3017,9 +3016,8 @@ int QAbstractItemView::sizeHintForRow(int row) const QStyleOptionViewItem option = d->viewOptionsV1(); int height = 0; int colCount = d->model->columnCount(d->root); - QModelIndex index; for (int c = 0; c < colCount; ++c) { - index = d->model->index(row, c, d->root); + const QModelIndex index = d->model->index(row, c, d->root); if (QWidget *editor = d->editorForIndex(index).widget.data()) height = qMax(height, editor->height()); int hint = d->delegateForIndex(index)->sizeHint(option, index).height(); @@ -3048,9 +3046,8 @@ int QAbstractItemView::sizeHintForColumn(int column) const QStyleOptionViewItem option = d->viewOptionsV1(); int width = 0; int rows = d->model->rowCount(d->root); - QModelIndex index; for (int r = 0; r < rows; ++r) { - index = d->model->index(r, column, d->root); + const QModelIndex index = d->model->index(r, column, d->root); if (QWidget *editor = d->editorForIndex(index).widget.data()) width = qMax(width, editor->sizeHint().width()); int hint = d->delegateForIndex(index)->sizeHint(option, index).width(); diff --git a/src/widgets/itemviews/qabstractitemview.h b/src/widgets/itemviews/qabstractitemview.h index 1be17b6c0e..ff1848b149 100644 --- a/src/widgets/itemviews/qabstractitemview.h +++ b/src/widgets/itemviews/qabstractitemview.h @@ -115,7 +115,7 @@ public: }; Q_ENUM(ScrollMode) - explicit QAbstractItemView(QWidget *parent = 0); + explicit QAbstractItemView(QWidget *parent = Q_NULLPTR); ~QAbstractItemView(); virtual void setModel(QAbstractItemModel *model); @@ -258,7 +258,7 @@ Q_SIGNALS: void iconSizeChanged(const QSize &size); protected: - QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = 0); + QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = Q_NULLPTR); void setHorizontalStepsPerItem(int steps); int horizontalStepsPerItem() const; @@ -283,7 +283,7 @@ protected: virtual bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event); virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index, - const QEvent *event = 0) const; + const QEvent *event = Q_NULLPTR) const; #ifndef QT_NO_DRAGANDDROP virtual void startDrag(Qt::DropActions supportedActions); diff --git a/src/widgets/itemviews/qabstractitemview_p.h b/src/widgets/itemviews/qabstractitemview_p.h index 016c50436b..bb88b25652 100644 --- a/src/widgets/itemviews/qabstractitemview_p.h +++ b/src/widgets/itemviews/qabstractitemview_p.h @@ -74,7 +74,7 @@ typedef QHash<QWidget *, QPersistentModelIndex> QEditorIndexHash; typedef QHash<QPersistentModelIndex, QEditorInfo> QIndexEditorHash; typedef QPair<QRect, QModelIndex> QItemViewPaintPair; -typedef QList<QItemViewPaintPair> QItemViewPaintPairs; +typedef QVector<QItemViewPaintPair> QItemViewPaintPairs; class QEmptyModel : public QAbstractItemModel { diff --git a/src/widgets/itemviews/qcolumnview.cpp b/src/widgets/itemviews/qcolumnview.cpp index 5c317bbb0c..92bbdf6b69 100644 --- a/src/widgets/itemviews/qcolumnview.cpp +++ b/src/widgets/itemviews/qcolumnview.cpp @@ -861,11 +861,15 @@ void QColumnView::setColumnWidths(const QList<int> &list) { Q_D(QColumnView); int i = 0; - for (; (i < list.count() && i < d->columns.count()); ++i) { + const int listCount = list.count(); + const int count = qMin(listCount, d->columns.count()); + for (; i < count; ++i) { d->columns.at(i)->resize(list.at(i), d->columns.at(i)->height()); d->columnSizes[i] = list.at(i); } - for (; i < list.count(); ++i) + + d->columnSizes.reserve(listCount); + for (; i < listCount; ++i) d->columnSizes.append(list.at(i)); } @@ -878,7 +882,9 @@ QList<int> QColumnView::columnWidths() const { Q_D(const QColumnView); QList<int> list; - for (int i = 0; i < d->columns.count(); ++i) + const int columnCount = d->columns.count(); + list.reserve(columnCount); + for (int i = 0; i < columnCount; ++i) list.append(d->columnSizes.at(i)); return list; } diff --git a/src/widgets/itemviews/qcolumnview.h b/src/widgets/itemviews/qcolumnview.h index 792ae04eb6..58472ddd8e 100644 --- a/src/widgets/itemviews/qcolumnview.h +++ b/src/widgets/itemviews/qcolumnview.h @@ -52,7 +52,7 @@ Q_SIGNALS: void updatePreviewWidget(const QModelIndex &index); public: - explicit QColumnView(QWidget *parent = 0); + explicit QColumnView(QWidget *parent = Q_NULLPTR); ~QColumnView(); // QAbstractItemView overloads @@ -76,7 +76,7 @@ public: QList<int> columnWidths() const; protected: - QColumnView(QColumnViewPrivate &dd, QWidget *parent = 0); + QColumnView(QColumnViewPrivate &dd, QWidget *parent = Q_NULLPTR); // QAbstractItemView overloads bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE; diff --git a/src/widgets/itemviews/qdatawidgetmapper.cpp b/src/widgets/itemviews/qdatawidgetmapper.cpp index c9fdf9967a..ee7b3613a2 100644 --- a/src/widgets/itemviews/qdatawidgetmapper.cpp +++ b/src/widgets/itemviews/qdatawidgetmapper.cpp @@ -756,7 +756,7 @@ void QDataWidgetMapper::clearMapping() QList<QDataWidgetMapperPrivate::WidgetMapper> copy; d->widgetMap.swap(copy); // a C++98 move - for (std::reverse_iterator<QList<QDataWidgetMapperPrivate::WidgetMapper>::const_iterator> it(copy.cend()), end(copy.cbegin()); it != end; ++it) { + for (QList<QDataWidgetMapperPrivate::WidgetMapper>::const_reverse_iterator it = copy.crbegin(), end = copy.crend(); it != end; ++it) { if (it->widget) it->widget->removeEventFilter(d->delegate); } diff --git a/src/widgets/itemviews/qdatawidgetmapper.h b/src/widgets/itemviews/qdatawidgetmapper.h index 5ccbee4d68..4dd5e0e14c 100644 --- a/src/widgets/itemviews/qdatawidgetmapper.h +++ b/src/widgets/itemviews/qdatawidgetmapper.h @@ -55,7 +55,7 @@ class Q_WIDGETS_EXPORT QDataWidgetMapper: public QObject Q_PROPERTY(SubmitPolicy submitPolicy READ submitPolicy WRITE setSubmitPolicy) public: - explicit QDataWidgetMapper(QObject *parent = 0); + explicit QDataWidgetMapper(QObject *parent = Q_NULLPTR); ~QDataWidgetMapper(); void setModel(QAbstractItemModel *model); diff --git a/src/widgets/itemviews/qdirmodel.cpp b/src/widgets/itemviews/qdirmodel.cpp index 50406b51f4..0c157c940f 100644 --- a/src/widgets/itemviews/qdirmodel.cpp +++ b/src/widgets/itemviews/qdirmodel.cpp @@ -66,7 +66,6 @@ public: struct QDirNode { QDirNode() : parent(0), populated(false), stat(false) {} - ~QDirNode() { children.clear(); } QDirNode *parent; QFileInfo info; QIcon icon; // cache the icon diff --git a/src/widgets/itemviews/qdirmodel.h b/src/widgets/itemviews/qdirmodel.h index dcc337244c..536e5299a2 100644 --- a/src/widgets/itemviews/qdirmodel.h +++ b/src/widgets/itemviews/qdirmodel.h @@ -60,8 +60,8 @@ public: }; QDirModel(const QStringList &nameFilters, QDir::Filters filters, - QDir::SortFlags sort, QObject *parent = 0); - explicit QDirModel(QObject *parent = 0); + QDir::SortFlags sort, QObject *parent = Q_NULLPTR); + explicit QDirModel(QObject *parent = Q_NULLPTR); ~QDirModel(); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; @@ -127,7 +127,7 @@ public Q_SLOTS: void refresh(const QModelIndex &parent = QModelIndex()); protected: - QDirModel(QDirModelPrivate &, QObject *parent = 0); + QDirModel(QDirModelPrivate &, QObject *parent = Q_NULLPTR); friend class QFileDialogPrivate; private: diff --git a/src/widgets/itemviews/qfileiconprovider.cpp b/src/widgets/itemviews/qfileiconprovider.cpp index 051cb8e7cc..f43bcd5d5a 100644 --- a/src/widgets/itemviews/qfileiconprovider.cpp +++ b/src/widgets/itemviews/qfileiconprovider.cpp @@ -117,6 +117,7 @@ public: if (themeSizes.isEmpty()) return sizes; + sizes.reserve(themeSizes.count()); foreach (int size, themeSizes) sizes << QSize(size, size); } diff --git a/src/widgets/itemviews/qheaderview.h b/src/widgets/itemviews/qheaderview.h index e0f57130c0..d892614a39 100644 --- a/src/widgets/itemviews/qheaderview.h +++ b/src/widgets/itemviews/qheaderview.h @@ -68,7 +68,7 @@ public: }; Q_ENUM(ResizeMode) - explicit QHeaderView(Qt::Orientation orientation, QWidget *parent = 0); + explicit QHeaderView(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR); virtual ~QHeaderView(); void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE; @@ -202,7 +202,7 @@ protected Q_SLOTS: void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast); protected: - QHeaderView(QHeaderViewPrivate &dd, Qt::Orientation orientation, QWidget *parent = 0); + QHeaderView(QHeaderViewPrivate &dd, Qt::Orientation orientation, QWidget *parent = Q_NULLPTR); void initialize(); void initializeSections(); diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h index 621c3c990e..7f92d2a81b 100644 --- a/src/widgets/itemviews/qheaderview_p.h +++ b/src/widgets/itemviews/qheaderview_p.h @@ -369,6 +369,7 @@ public: #endif }; +Q_DECLARE_TYPEINFO(QHeaderViewPrivate::SectionItem, Q_PRIMITIVE_TYPE); QT_END_NAMESPACE diff --git a/src/widgets/itemviews/qitemdelegate.h b/src/widgets/itemviews/qitemdelegate.h index edc224b0f3..beba6b90fb 100644 --- a/src/widgets/itemviews/qitemdelegate.h +++ b/src/widgets/itemviews/qitemdelegate.h @@ -53,7 +53,7 @@ class Q_WIDGETS_EXPORT QItemDelegate : public QAbstractItemDelegate Q_PROPERTY(bool clipping READ hasClipping WRITE setClipping) public: - explicit QItemDelegate(QObject *parent = 0); + explicit QItemDelegate(QObject *parent = Q_NULLPTR); ~QItemDelegate(); bool hasClipping() const; diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 8257944821..9c79509874 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -53,6 +53,8 @@ QT_BEGIN_NAMESPACE +extern bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event); + /*! \class QListView @@ -796,6 +798,35 @@ void QListView::mouseReleaseEvent(QMouseEvent *e) } } +#ifndef QT_NO_WHEELEVENT +/*! + \reimp +*/ +void QListView::wheelEvent(QWheelEvent *e) +{ + Q_D(QListView); + if (e->orientation() == Qt::Vertical) { + if (e->angleDelta().x() == 0 + && ((d->flow == TopToBottom && d->wrap) || (d->flow == LeftToRight && !d->wrap)) + && d->vbar->minimum() == 0 && d->vbar->maximum() == 0) { + QPoint pixelDelta(e->pixelDelta().y(), e->pixelDelta().x()); + QPoint angleDelta(e->angleDelta().y(), e->angleDelta().x()); + QWheelEvent hwe(e->pos(), e->globalPos(), pixelDelta, angleDelta, e->delta(), + Qt::Horizontal, e->buttons(), e->modifiers(), e->phase()); + if (e->spontaneous()) + qt_sendSpontaneousEvent(d->hbar, &hwe); + else + QApplication::sendEvent(d->hbar, &hwe); + e->setAccepted(hwe.isAccepted()); + } else { + QApplication::sendEvent(d->vbar, e); + } + } else { + QApplication::sendEvent(d->hbar, e); + } +} +#endif // QT_NO_WHEELEVENT + /*! \reimp */ diff --git a/src/widgets/itemviews/qlistview.h b/src/widgets/itemviews/qlistview.h index f62c96067f..433933b500 100644 --- a/src/widgets/itemviews/qlistview.h +++ b/src/widgets/itemviews/qlistview.h @@ -72,7 +72,7 @@ public: enum ViewMode { ListMode, IconMode }; Q_ENUM(ViewMode) - explicit QListView(QWidget *parent = 0); + explicit QListView(QWidget *parent = Q_NULLPTR); ~QListView(); void setMovement(Movement movement); @@ -131,7 +131,7 @@ Q_SIGNALS: void indexesMoved(const QModelIndexList &indexes); protected: - QListView(QListViewPrivate &, QWidget *parent = 0); + QListView(QListViewPrivate &, QWidget *parent = Q_NULLPTR); bool event(QEvent *e) Q_DECL_OVERRIDE; @@ -146,6 +146,9 @@ protected: void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE; +#ifndef QT_NO_WHEELEVENT + void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE; +#endif void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE; void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE; diff --git a/src/widgets/itemviews/qlistview_p.h b/src/widgets/itemviews/qlistview_p.h index fe059d73dd..c1b5b8772c 100644 --- a/src/widgets/itemviews/qlistview_p.h +++ b/src/widgets/itemviews/qlistview_p.h @@ -93,6 +93,7 @@ private: mutable int indexHint; uint visited; }; +Q_DECLARE_TYPEINFO(QListViewItem, Q_PRIMITIVE_TYPE); struct QListViewLayoutInfo { @@ -105,6 +106,7 @@ struct QListViewLayoutInfo QListView::Flow flow; int max; }; +Q_DECLARE_TYPEINFO(QListViewLayoutInfo, Q_PRIMITIVE_TYPE); class QListView; class QListViewPrivate; diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp index 66f965aa54..0e1e56e966 100644 --- a/src/widgets/itemviews/qlistwidget.cpp +++ b/src/widgets/itemviews/qlistwidget.cpp @@ -299,7 +299,10 @@ void QListModel::sort(int column, Qt::SortOrder order) std::sort(sorting.begin(), sorting.end(), compare); QModelIndexList fromIndexes; QModelIndexList toIndexes; - for (int r = 0; r < sorting.count(); ++r) { + const int sortingCount = sorting.count(); + fromIndexes.reserve(sortingCount); + toIndexes.reserve(sortingCount); + for (int r = 0; r < sortingCount; ++r) { QListWidgetItem *item = sorting.at(r).first; toIndexes.append(createIndex(r, 0, item)); fromIndexes.append(createIndex(sorting.at(r).second, 0, sorting.at(r).first)); @@ -423,7 +426,9 @@ QMimeData *QListModel::internalMimeData() const QMimeData *QListModel::mimeData(const QModelIndexList &indexes) const { QList<QListWidgetItem*> itemlist; - for (int i = 0; i < indexes.count(); ++i) + const int indexesCount = indexes.count(); + itemlist.reserve(indexesCount); + for (int i = 0; i < indexesCount; ++i) itemlist << at(indexes.at(i).row()); const QListWidget *view = qobject_cast<const QListWidget*>(QObject::parent()); @@ -1694,7 +1699,9 @@ QList<QListWidgetItem*> QListWidget::selectedItems() const Q_D(const QListWidget); QModelIndexList indexes = selectionModel()->selectedIndexes(); QList<QListWidgetItem*> items; - for (int i = 0; i < indexes.count(); ++i) + const int numIndexes = indexes.count(); + items.reserve(numIndexes); + for (int i = 0; i < numIndexes; ++i) items.append(d->listModel()->at(indexes.at(i).row())); return items; } @@ -1710,7 +1717,9 @@ QList<QListWidgetItem*> QListWidget::findItems(const QString &text, Qt::MatchFla QModelIndexList indexes = d->listModel()->match(model()->index(0, 0, QModelIndex()), Qt::DisplayRole, text, -1, flags); QList<QListWidgetItem*> items; - for (int i = 0; i < indexes.size(); ++i) + const int indexesSize = indexes.size(); + items.reserve(indexesSize); + for (int i = 0; i < indexesSize; ++i) items.append(d->listModel()->at(indexes.at(i).row())); return items; } @@ -1795,6 +1804,7 @@ QMimeData *QListWidget::mimeData(const QList<QListWidgetItem*> items) const // if non empty, it's called from the model's own mimeData if (cachedIndexes.isEmpty()) { + cachedIndexes.reserve(items.count()); foreach (QListWidgetItem *item, items) cachedIndexes << indexFromItem(item); @@ -1845,7 +1855,9 @@ void QListWidget::dropEvent(QDropEvent *event) { if (d->dropOn(event, &row, &col, &topIndex)) { QList<QModelIndex> selIndexes = selectedIndexes(); QList<QPersistentModelIndex> persIndexes; - for (int i = 0; i < selIndexes.count(); i++) + const int selIndexesCount = selIndexes.count(); + persIndexes.reserve(selIndexesCount); + for (int i = 0; i < selIndexesCount; i++) persIndexes.append(selIndexes.at(i)); if (persIndexes.contains(topIndex)) diff --git a/src/widgets/itemviews/qlistwidget.h b/src/widgets/itemviews/qlistwidget.h index 8ab864c930..1fbdc472db 100644 --- a/src/widgets/itemviews/qlistwidget.h +++ b/src/widgets/itemviews/qlistwidget.h @@ -55,10 +55,10 @@ class Q_WIDGETS_EXPORT QListWidgetItem friend class QListWidget; public: enum ItemType { Type = 0, UserType = 1000 }; - explicit QListWidgetItem(QListWidget *view = 0, int type = Type); - explicit QListWidgetItem(const QString &text, QListWidget *view = 0, int type = Type); + explicit QListWidgetItem(QListWidget *view = Q_NULLPTR, int type = Type); + explicit QListWidgetItem(const QString &text, QListWidget *view = Q_NULLPTR, int type = Type); explicit QListWidgetItem(const QIcon &icon, const QString &text, - QListWidget *view = 0, int type = Type); + QListWidget *view = Q_NULLPTR, int type = Type); QListWidgetItem(const QListWidgetItem &other); virtual ~QListWidgetItem(); @@ -198,7 +198,7 @@ class Q_WIDGETS_EXPORT QListWidget : public QListView friend class QListWidgetItem; friend class QListModel; public: - explicit QListWidget(QWidget *parent = 0); + explicit QListWidget(QWidget *parent = Q_NULLPTR); ~QListWidget(); QListWidgetItem *item(int row) const; @@ -299,7 +299,7 @@ private: }; inline void QListWidget::removeItemWidget(QListWidgetItem *aItem) -{ setItemWidget(aItem, 0); } +{ setItemWidget(aItem, Q_NULLPTR); } inline void QListWidget::addItem(QListWidgetItem *aitem) { insertItem(count(), aitem); } diff --git a/src/widgets/itemviews/qstyleditemdelegate.h b/src/widgets/itemviews/qstyleditemdelegate.h index 590ddf6614..541830239a 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.h +++ b/src/widgets/itemviews/qstyleditemdelegate.h @@ -52,7 +52,7 @@ class Q_WIDGETS_EXPORT QStyledItemDelegate : public QAbstractItemDelegate Q_OBJECT public: - explicit QStyledItemDelegate(QObject *parent = 0); + explicit QStyledItemDelegate(QObject *parent = Q_NULLPTR); ~QStyledItemDelegate(); // painting diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp index ae31387faf..0af4a26494 100644 --- a/src/widgets/itemviews/qtableview.cpp +++ b/src/widgets/itemviews/qtableview.cpp @@ -190,7 +190,7 @@ QList<QSpanCollection::Span *> QSpanCollection::spansInRect(int x, int y, int w, #ifdef DEBUG_SPAN_UPDATE QDebug operator<<(QDebug str, const QSpanCollection::Span &span) { - str << "(" << span.top() << "," << span.left() << "," << span.bottom() << "," << span.right() << ")"; + str << '(' << span.top() << ',' << span.left() << ',' << span.bottom() << ',' << span.right() << ')'; return str; } #endif @@ -1884,6 +1884,7 @@ void QTableView::setSelection(const QRect &rect, QItemSelectionModel::SelectionF break; } } while (expanded); + selection.reserve((right - left + 1) * (bottom - top + 1)); for (int horizontal = left; horizontal <= right; ++horizontal) { int column = d->logicalColumn(horizontal); for (int vertical = top; vertical <= bottom; ++vertical) { @@ -1897,6 +1898,7 @@ void QTableView::setSelection(const QRect &rect, QItemSelectionModel::SelectionF int left = d->visualColumn(tl.column()); int bottom = d->visualRow(br.row()); int right = d->visualColumn(br.column()); + selection.reserve((right - left + 1) * (bottom - top + 1)); for (int horizontal = left; horizontal <= right; ++horizontal) { int column = d->logicalColumn(horizontal); for (int vertical = top; vertical <= bottom; ++vertical) { @@ -1908,6 +1910,7 @@ void QTableView::setSelection(const QRect &rect, QItemSelectionModel::SelectionF } else if (horizontalMoved) { int left = d->visualColumn(tl.column()); int right = d->visualColumn(br.column()); + selection.reserve(right - left + 1); for (int visual = left; visual <= right; ++visual) { int column = d->logicalColumn(visual); QModelIndex topLeft = d->model->index(tl.row(), column, d->root); @@ -1917,6 +1920,7 @@ void QTableView::setSelection(const QRect &rect, QItemSelectionModel::SelectionF } else if (verticalMoved) { int top = d->visualRow(tl.row()); int bottom = d->visualRow(br.row()); + selection.reserve(bottom - top + 1); for (int visual = top; visual <= bottom; ++visual) { int row = d->logicalRow(visual); QModelIndex topLeft = d->model->index(row, tl.column(), d->root); @@ -2540,7 +2544,7 @@ void QTableView::setColumnHidden(int column, bool hide) */ /*! - If \a enabled true enables sorting for the table and immediately + If \a enable is true, enables sorting for the table and immediately trigger a call to sortByColumn() with the current sort section and order */ diff --git a/src/widgets/itemviews/qtableview.h b/src/widgets/itemviews/qtableview.h index d69b78c6fe..1bb23844cc 100644 --- a/src/widgets/itemviews/qtableview.h +++ b/src/widgets/itemviews/qtableview.h @@ -54,7 +54,7 @@ class Q_WIDGETS_EXPORT QTableView : public QAbstractItemView Q_PROPERTY(bool cornerButtonEnabled READ isCornerButtonEnabled WRITE setCornerButtonEnabled) public: - explicit QTableView(QWidget *parent = 0); + explicit QTableView(QWidget *parent = Q_NULLPTR); ~QTableView(); void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE; diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index 9ebcbc35a7..a10b95f701 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -507,11 +507,15 @@ void QTableModel::sort(int column, Qt::SortOrder order) QVector<QTableWidgetItem*> sorted_table(tableItems.count()); QModelIndexList from; QModelIndexList to; - for (int i = 0; i < rowCount(); ++i) { + const int numRows = rowCount(); + const int numColumns = columnCount(); + from.reserve(numRows * numColumns); + to.reserve(numRows * numColumns); + for (int i = 0; i < numRows; ++i) { int r = (i < sortable.count() ? sortable.at(i).second : unsortable.at(i - sortable.count())); - for (int c = 0; c < columnCount(); ++c) { + for (int c = 0; c < numColumns; ++c) { sorted_table[tableIndex(i, c)] = item(r, c); from.append(createIndex(r, c)); to.append(createIndex(i, c)); @@ -551,9 +555,7 @@ void QTableModel::ensureSorted(int column, Qt::SortOrder order, LessThan compare = (order == Qt::AscendingOrder ? &itemLessThan : &itemGreaterThan); std::stable_sort(sorting.begin(), sorting.end(), compare); - - QModelIndexList oldPersistentIndexes = persistentIndexList(); - QModelIndexList newPersistentIndexes = oldPersistentIndexes; + QModelIndexList oldPersistentIndexes, newPersistentIndexes; QVector<QTableWidgetItem*> newTable = tableItems; QVector<QTableWidgetItem*> newVertical = verticalHeaderItems; QVector<QTableWidgetItem*> colItems = columnItems(column); @@ -569,7 +571,12 @@ void QTableModel::ensureSorted(int column, Qt::SortOrder order, newRow = oldRow; vit = colItems.insert(vit, item); if (newRow != oldRow) { - changed = true; + if (!changed) { + emit layoutAboutToBeChanged(); + oldPersistentIndexes = persistentIndexList(); + newPersistentIndexes = oldPersistentIndexes; + changed = true; + } // move the items @ oldRow to newRow int cc = columnCount(); QVector<QTableWidgetItem*> rowItems(cc); @@ -596,7 +603,6 @@ void QTableModel::ensureSorted(int column, Qt::SortOrder order, } if (changed) { - emit layoutAboutToBeChanged(); tableItems = newTable; verticalHeaderItems = newVertical; changePersistentIndexList(oldPersistentIndexes, @@ -812,7 +818,9 @@ QMimeData *QTableModel::internalMimeData() const QMimeData *QTableModel::mimeData(const QModelIndexList &indexes) const { QList<QTableWidgetItem*> items; - for (int i = 0; i < indexes.count(); ++i) + const int indexesCount = indexes.count(); + items.reserve(indexesCount); + for (int i = 0; i < indexesCount; ++i) items << item(indexes.at(i)); const QTableWidget *view = qobject_cast<const QTableWidget*>(QObject::parent()); @@ -2326,7 +2334,9 @@ QList<QTableWidgetSelectionRange> QTableWidget::selectedRanges() const { const QList<QItemSelectionRange> ranges = selectionModel()->selection(); QList<QTableWidgetSelectionRange> result; - for (int i = 0; i < ranges.count(); ++i) + const int rangesCount = ranges.count(); + result.reserve(rangesCount); + for (int i = 0; i < rangesCount; ++i) result.append(QTableWidgetSelectionRange(ranges.at(i).top(), ranges.at(i).left(), ranges.at(i).bottom(), @@ -2372,7 +2382,9 @@ QList<QTableWidgetItem*> QTableWidget::findItems(const QString &text, Qt::MatchF indexes += d->model->match(model()->index(0, column, QModelIndex()), Qt::DisplayRole, text, -1, flags); QList<QTableWidgetItem*> items; - for (int i = 0; i < indexes.size(); ++i) + const int indexCount = indexes.size(); + items.reserve(indexCount); + for (int i = 0; i < indexCount; ++i) items.append(d->tableModel()->item(indexes.at(i))); return items; } @@ -2565,6 +2577,7 @@ QMimeData *QTableWidget::mimeData(const QList<QTableWidgetItem*> items) const // if non empty, it's called from the model's own mimeData if (cachedIndexes.isEmpty()) { + cachedIndexes.reserve(items.count()); foreach (QTableWidgetItem *item, items) cachedIndexes << indexFromItem(item); @@ -2676,7 +2689,9 @@ void QTableWidget::dropEvent(QDropEvent *event) { } QList<QTableWidgetItem *> taken; - for (int i = 0; i < indexes.count(); ++i) + const int indexesCount = indexes.count(); + taken.reserve(indexesCount); + for (int i = 0; i < indexesCount; ++i) taken.append(takeItem(indexes.at(i).row(), indexes.at(i).column())); for (int i = 0; i < indexes.count(); ++i) { diff --git a/src/widgets/itemviews/qtablewidget.h b/src/widgets/itemviews/qtablewidget.h index 93639f0753..9acdc19863 100644 --- a/src/widgets/itemviews/qtablewidget.h +++ b/src/widgets/itemviews/qtablewidget.h @@ -214,8 +214,8 @@ class Q_WIDGETS_EXPORT QTableWidget : public QTableView friend class QTableModel; public: - explicit QTableWidget(QWidget *parent = 0); - QTableWidget(int rows, int columns, QWidget *parent = 0); + explicit QTableWidget(QWidget *parent = Q_NULLPTR); + QTableWidget(int rows, int columns, QWidget *parent = Q_NULLPTR); ~QTableWidget(); void setRowCount(int rows); @@ -344,7 +344,7 @@ private: }; inline void QTableWidget::removeCellWidget(int arow, int acolumn) -{ setCellWidget(arow, acolumn, 0); } +{ setCellWidget(arow, acolumn, Q_NULLPTR); } inline QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const { return itemAt(QPoint(ax, ay)); } diff --git a/src/widgets/itemviews/qtreeview.h b/src/widgets/itemviews/qtreeview.h index e9e2e78e17..546cc488cb 100644 --- a/src/widgets/itemviews/qtreeview.h +++ b/src/widgets/itemviews/qtreeview.h @@ -60,7 +60,7 @@ class Q_WIDGETS_EXPORT QTreeView : public QAbstractItemView Q_PROPERTY(bool expandsOnDoubleClick READ expandsOnDoubleClick WRITE setExpandsOnDoubleClick) public: - explicit QTreeView(QWidget *parent = 0); + explicit QTreeView(QWidget *parent = Q_NULLPTR); ~QTreeView(); void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE; @@ -163,7 +163,7 @@ protected Q_SLOTS: void rowsRemoved(const QModelIndex &parent, int first, int last); protected: - QTreeView(QTreeViewPrivate &dd, QWidget *parent = 0); + QTreeView(QTreeViewPrivate &dd, QWidget *parent = Q_NULLPTR); void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE; void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE; void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE; diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index bf736bc387..db4451c99a 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -1720,12 +1720,12 @@ void QTreeWidgetItem::setData(int column, int role, const QVariant &value) } } break; case Qt::CheckStateRole: - if ((itemFlags & Qt::ItemIsTristate) && value != Qt::PartiallyChecked) { + if ((itemFlags & Qt::ItemIsAutoTristate) && value != Qt::PartiallyChecked) { for (int i = 0; i < children.count(); ++i) { QTreeWidgetItem *child = children.at(i); if (child->data(column, role).isValid()) {// has a CheckState Qt::ItemFlags f = itemFlags; // a little hack to avoid multiple dataChanged signals - itemFlags &= ~Qt::ItemIsTristate; + itemFlags &= ~Qt::ItemIsAutoTristate; child->setData(column, role, value); itemFlags = f; } @@ -1760,7 +1760,7 @@ void QTreeWidgetItem::setData(int column, int role, const QVariant &value) model->emitDataChanged(this, column); if (role == Qt::CheckStateRole) { QTreeWidgetItem *p; - for (p = par; p && (p->itemFlags & Qt::ItemIsTristate); p = p->par) + for (p = par; p && (p->itemFlags & Qt::ItemIsAutoTristate); p = p->par) model->emitDataChanged(p, column); } } @@ -1779,7 +1779,7 @@ QVariant QTreeWidgetItem::data(int column, int role) const break; case Qt::CheckStateRole: // special case for check state in tristate - if (children.count() && (itemFlags & Qt::ItemIsTristate)) + if (children.count() && (itemFlags & Qt::ItemIsAutoTristate)) return childrenCheckState(column); // fallthrough intended default: @@ -3042,7 +3042,9 @@ QList<QTreeWidgetItem*> QTreeWidget::findItems(const QString &text, Qt::MatchFla QModelIndexList indexes = d->model->match(model()->index(0, column, QModelIndex()), Qt::DisplayRole, text, -1, flags); QList<QTreeWidgetItem*> items; - for (int i = 0; i < indexes.size(); ++i) + const int indexesSize = indexes.size(); + items.reserve(indexesSize); + for (int i = 0; i < indexesSize; ++i) items.append(d->item(indexes.at(i))); return items; } @@ -3371,7 +3373,9 @@ void QTreeWidget::dropEvent(QDropEvent *event) { if (d->dropOn(event, &row, &col, &topIndex)) { QList<QModelIndex> idxs = selectedIndexes(); QList<QPersistentModelIndex> indexes; - for (int i = 0; i < idxs.count(); i++) + const int indexesCount = idxs.count(); + indexes.reserve(indexesCount); + for (int i = 0; i < indexesCount; i++) indexes.append(idxs.at(i)); if (indexes.contains(topIndex)) @@ -3382,7 +3386,7 @@ void QTreeWidget::dropEvent(QDropEvent *event) { // Remove the items QList<QTreeWidgetItem *> taken; - for (int i = indexes.count() - 1; i >= 0; --i) { + for (int i = 0; i < indexes.count(); ++i) { QTreeWidgetItem *parent = itemFromIndex(indexes.at(i)); if (!parent || !parent->parent()) { taken.append(takeTopLevelItem(indexes.at(i).row())); diff --git a/src/widgets/itemviews/qtreewidget.h b/src/widgets/itemviews/qtreewidget.h index 564e10ac1a..995528fe37 100644 --- a/src/widgets/itemviews/qtreewidget.h +++ b/src/widgets/itemviews/qtreewidget.h @@ -172,7 +172,7 @@ public: inline QTreeWidgetItem *parent() const { return par; } inline QTreeWidgetItem *child(int index) const { if (index < 0 || index >= children.size()) - return 0; + return Q_NULLPTR; executePendingSort(); return children.at(index); } @@ -255,7 +255,7 @@ class Q_WIDGETS_EXPORT QTreeWidget : public QTreeView friend class QTreeModel; friend class QTreeWidgetItem; public: - explicit QTreeWidget(QWidget *parent = 0); + explicit QTreeWidget(QWidget *parent = Q_NULLPTR); ~QTreeWidget(); int columnCount() const; @@ -375,7 +375,7 @@ private: }; inline void QTreeWidget::removeItemWidget(QTreeWidgetItem *item, int column) -{ setItemWidget(item, column, 0); } +{ setItemWidget(item, column, Q_NULLPTR); } inline QTreeWidgetItem *QTreeWidget::itemAt(int ax, int ay) const { return itemAt(QPoint(ax, ay)); } diff --git a/src/widgets/itemviews/qwidgetitemdata_p.h b/src/widgets/itemviews/qwidgetitemdata_p.h index 307d228c74..d8c1fc2ff7 100644 --- a/src/widgets/itemviews/qwidgetitemdata_p.h +++ b/src/widgets/itemviews/qwidgetitemdata_p.h @@ -58,6 +58,7 @@ public: QVariant value; inline bool operator==(const QWidgetItemData &other) const { return role == other.role && value == other.value; } }; +Q_DECLARE_TYPEINFO(QWidgetItemData, Q_MOVABLE_TYPE); #ifndef QT_NO_DATASTREAM |