diff options
Diffstat (limited to 'src/widgets/graphicsview')
-rw-r--r-- | src/widgets/graphicsview/qgraphicsitem.cpp | 6 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicsscene.cpp | 13 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicsscene_p.h | 17 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicswidget.h | 3 |
4 files changed, 35 insertions, 4 deletions
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index 88baf8015a..b58a8c0b3c 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -4545,6 +4545,8 @@ QTransform QGraphicsItem::itemTransform(const QGraphicsItem *other, bool *ok) co } #if QT_DEPRECATED_SINCE(5, 13) +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED /*! \obsolete @@ -4583,6 +4585,7 @@ void QGraphicsItem::setMatrix(const QMatrix &matrix, bool combine) // Send post-notification. itemChange(ItemTransformHasChanged, QVariant::fromValue<QTransform>(newTransform)); } +QT_WARNING_POP #endif /*! @@ -11519,9 +11522,12 @@ QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemChange change) str = "ItemFlagsHaveChanged"; break; #if QT_DEPRECATED_SINCE(5, 14) +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED case QGraphicsItem::ItemMatrixChange: str = "ItemMatrixChange"; break; +QT_WARNING_POP #endif case QGraphicsItem::ItemParentChange: str = "ItemParentChange"; diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp index 1208adfd17..a47d0d879d 100644 --- a/src/widgets/graphicsview/qgraphicsscene.cpp +++ b/src/widgets/graphicsview/qgraphicsscene.cpp @@ -386,7 +386,15 @@ void QGraphicsScenePrivate::_q_emitUpdated() // Notify the changes to anybody interested. QList<QRectF> oldUpdatedRects; - oldUpdatedRects = updateAll ? (QList<QRectF>() << q->sceneRect()) : updatedRects; + if (updateAll) { + oldUpdatedRects << q->sceneRect(); + } else { + // Switch to a ranged constructor in Qt 6... + oldUpdatedRects.reserve(int(updatedRects.size())); + std::copy(updatedRects.cbegin(), updatedRects.cend(), + std::back_inserter(oldUpdatedRects)); + } + updateAll = false; updatedRects.clear(); emit q->changed(oldUpdatedRects); @@ -3219,8 +3227,7 @@ void QGraphicsScene::update(const QRectF &rect) view->d_func()->updateRectF(rect); } } else { - if (!d->updatedRects.contains(rect)) - d->updatedRects << rect; + d->updatedRects.insert(rect); } } diff --git a/src/widgets/graphicsview/qgraphicsscene_p.h b/src/widgets/graphicsview/qgraphicsscene_p.h index 7934359cee..9ecfca8ebf 100644 --- a/src/widgets/graphicsview/qgraphicsscene_p.h +++ b/src/widgets/graphicsview/qgraphicsscene_p.h @@ -69,6 +69,9 @@ #include <QtWidgets/qstyle.h> #include <QtWidgets/qstyleoption.h> +#include <set> +#include <tuple> + QT_REQUIRE_CONFIG(graphicsview); QT_BEGIN_NAMESPACE @@ -122,7 +125,19 @@ public: QRectF growingItemsBoundingRect; void _q_emitUpdated(); - QList<QRectF> updatedRects; + + struct UpdatedRectsCmp + { + bool operator() (const QRectF &a, const QRectF &b) const noexcept + { + return std::make_tuple(a.y(), a.x(), a.height(), a.width()) + < std::make_tuple(b.y(), b.x(), b.height(), b.width()); + } + }; + + // std::set was used here instead of std::unordered_set due to requiring only a comparator and + // showing equivalent performance in empirical measurements within the ranges of interest... + std::set<QRectF, UpdatedRectsCmp> updatedRects; QPainterPath selectionArea; int selectionChanging; diff --git a/src/widgets/graphicsview/qgraphicswidget.h b/src/widgets/graphicsview/qgraphicswidget.h index 8223b921c9..6c5171cc02 100644 --- a/src/widgets/graphicsview/qgraphicswidget.h +++ b/src/widgets/graphicsview/qgraphicswidget.h @@ -42,6 +42,9 @@ #include <QtWidgets/qtwidgetsglobal.h> #include <QtGui/qfont.h> +#if QT_CONFIG(action) +# include <QtWidgets/qaction.h> +#endif #include <QtWidgets/qgraphicslayoutitem.h> #include <QtWidgets/qgraphicsitem.h> #include <QtGui/qpalette.h> |