summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@theqtcompany.com>2016-06-21 18:01:26 +0200
committerThomas Hartmann <Thomas.Hartmann@theqtcompany.com>2016-06-22 16:17:30 +0000
commit3fb0dc379a005ee8b046d295adb6457e591cc7d1 (patch)
treeb3e942e2490c789733eff7af35a20de6e69ccf84
parent8eeb657e75f1ed5ccbe0862fe935c9a4a9bffd90 (diff)
downloadqt-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.cpp31
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorscene.h1
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*);