diff options
Diffstat (limited to 'src/widgets/graphicsview/qgraphicsview.cpp')
-rw-r--r-- | src/widgets/graphicsview/qgraphicsview.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index 741d6658cc..dd10c95e2a 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -256,6 +256,20 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime < \sa dragMode, QGraphicsScene::setSelectionArea() */ +/*! + \since 5.1 + + \fn void QGraphicsView::rubberBandChanged(QRect rubberBandRect, QPointF fromScenePoint, QPointF toScenePoint) + + This signal is emitted when the rubber band rect is changed. The viewport Rect is specified by \a rubberBandRect. + The drag start position and drag end position are provided in scene points with \a fromScenePoint and \a toScenePoint. + + When rubberband selection ends this signal will be emitted with null vales. + + \sa rubberBandRect() +*/ + + #include "qgraphicsview.h" #include "qgraphicsview_p.h" @@ -727,16 +741,27 @@ void QGraphicsViewPrivate::updateRubberBand(const QMouseEvent *event) // if we didn't get the release events). if (!event->buttons()) { rubberBanding = false; - rubberBandRect = QRect(); + if (!rubberBandRect.isNull()) { + rubberBandRect = QRect(); + emit q->rubberBandChanged(rubberBandRect, QPointF(), QPointF()); + } return; } + QRect oldRubberband = rubberBandRect; + // Update rubberband position const QPoint mp = q->mapFromScene(mousePressScenePoint); const QPoint ep = event->pos(); rubberBandRect = QRect(qMin(mp.x(), ep.x()), qMin(mp.y(), ep.y()), qAbs(mp.x() - ep.x()) + 1, qAbs(mp.y() - ep.y()) + 1); + if (rubberBandRect != oldRubberband || lastRubberbandScenePoint != lastMouseMoveScenePoint) { + lastRubberbandScenePoint = lastMouseMoveScenePoint; + oldRubberband = rubberBandRect; + emit q->rubberBandChanged(rubberBandRect, mousePressScenePoint, lastRubberbandScenePoint); + } + // Update new rubberband if (viewportUpdateMode != QGraphicsView::NoViewportUpdate) { if (viewportUpdateMode != QGraphicsView::FullViewportUpdate) @@ -1518,7 +1543,7 @@ void QGraphicsView::setRubberBandSelectionMode(Qt::ItemSelectionMode mode) Notice that part of this QRect can be outise the visual viewport. It can e.g contain negative values. - \sa rubberBandSelectionMode + \sa rubberBandSelectionMode, rubberBandChanged() */ QRect QGraphicsView::rubberBandRect() const @@ -3316,7 +3341,10 @@ void QGraphicsView::mouseReleaseEvent(QMouseEvent *event) d->updateAll(); } d->rubberBanding = false; - d->rubberBandRect = QRect(); + if (!d->rubberBandRect.isNull()) { + d->rubberBandRect = QRect(); + emit rubberBandChanged(d->rubberBandRect, QPointF(), QPointF()); + } } } else #endif |