diff options
author | Thomas Hartmann <Thomas.Hartmann@theqtcompany.com> | 2016-06-21 18:01:26 +0200 |
---|---|---|
committer | Thomas Hartmann <Thomas.Hartmann@theqtcompany.com> | 2016-06-22 16:17:30 +0000 |
commit | 3fb0dc379a005ee8b046d295adb6457e591cc7d1 (patch) | |
tree | b3e942e2490c789733eff7af35a20de6e69ccf84 | |
parent | 8eeb657e75f1ed5ccbe0862fe935c9a4a9bffd90 (diff) | |
download | qt-creator-3fb0dc379a005ee8b046d295adb6457e591cc7d1.tar.gz |
QmlDesigner: Use correct overload of QGraphicsScene:items
QGraphicsScene:items() is deprecated and returns incorrect results
if the scene contains items that ignore transformations.
We have to use the overload that takes a QTransform instead
and define itemsAt for convenience.
Task-number: QTBUG-49627
Change-Id: I388c62dd23a61c569ec6b99d756f4fbe1024e5db
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
-rw-r--r-- | src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp | 31 | ||||
-rw-r--r-- | src/plugins/qmldesigner/components/formeditor/formeditorscene.h | 1 |
2 files changed, 23 insertions, 9 deletions
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp index 0f958a0f96..7a4ad4f9cb 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp @@ -221,7 +221,7 @@ FormEditorItem *FormEditorScene::addFormEditorItem(const QmlItemNode &qmlItemNod void FormEditorScene::dropEvent(QGraphicsSceneDragDropEvent * event) { - currentTool()->dropEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->dropEvent(removeLayerItems(itemsAt(event->scenePos())), event); if (views().first()) views().first()->setFocus(); @@ -229,19 +229,19 @@ void FormEditorScene::dropEvent(QGraphicsSceneDragDropEvent * event) void FormEditorScene::dragEnterEvent(QGraphicsSceneDragDropEvent * event) { - currentTool()->dragEnterEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->dragEnterEvent(removeLayerItems(itemsAt(event->scenePos())), event); } void FormEditorScene::dragLeaveEvent(QGraphicsSceneDragDropEvent * event) { - currentTool()->dragLeaveEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->dragLeaveEvent(removeLayerItems(itemsAt(event->scenePos())), event); return; } void FormEditorScene::dragMoveEvent(QGraphicsSceneDragDropEvent * event) { - currentTool()->dragMoveEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->dragMoveEvent(removeLayerItems(itemsAt(event->scenePos())), event); } QList<QGraphicsItem *> FormEditorScene::removeLayerItems(const QList<QGraphicsItem *> &itemList) @@ -255,10 +255,23 @@ QList<QGraphicsItem *> FormEditorScene::removeLayerItems(const QList<QGraphicsIt return itemListWithoutLayerItems; } +QList<QGraphicsItem *> FormEditorScene::itemsAt(const QPointF &pos) +{ + QTransform transform; + + if (!views().isEmpty()) + transform = views().first()->transform(); + + return items(pos, + Qt::IntersectsItemShape, + Qt::DescendingOrder, + transform); +} + void FormEditorScene::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (editorView() && editorView()->model()) - currentTool()->mousePressEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->mousePressEvent(removeLayerItems(itemsAt(event->scenePos())), event); } static QTime staticTimer() @@ -275,9 +288,9 @@ void FormEditorScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (time.elapsed() > 30) { time.restart(); if (event->buttons()) - currentTool()->mouseMoveEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->mouseMoveEvent(removeLayerItems(itemsAt(event->scenePos())), event); else - currentTool()->hoverMoveEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->hoverMoveEvent(removeLayerItems(itemsAt(event->scenePos())), event); event->accept(); } @@ -286,7 +299,7 @@ void FormEditorScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void FormEditorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (editorView() && editorView()->model()) { - currentTool()->mouseReleaseEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->mouseReleaseEvent(removeLayerItems(itemsAt(event->scenePos())), event); event->accept(); } @@ -295,7 +308,7 @@ void FormEditorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void FormEditorScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { if (editorView() && editorView()->model()) { - currentTool()->mouseDoubleClickEvent(removeLayerItems(items(event->scenePos())), event); + currentTool()->mouseDoubleClickEvent(removeLayerItems(itemsAt(event->scenePos())), event); event->accept(); } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h index a16b45dab2..ee8340ec14 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h @@ -111,6 +111,7 @@ protected: private: QList<QGraphicsItem *> removeLayerItems(const QList<QGraphicsItem *> &itemList); + QList<QGraphicsItem *> itemsAt(const QPointF &pos); AbstractFormEditorTool* currentTool() const; void removeItemFromHash(FormEditorItem*); |