forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -221,7 +221,7 @@ FormEditorItem *FormEditorScene::addFormEditorItem(const QmlItemNode &qmlItemNod
|
|||||||
|
|
||||||
void FormEditorScene::dropEvent(QGraphicsSceneDragDropEvent * event)
|
void FormEditorScene::dropEvent(QGraphicsSceneDragDropEvent * event)
|
||||||
{
|
{
|
||||||
currentTool()->dropEvent(removeLayerItems(items(event->scenePos())), event);
|
currentTool()->dropEvent(removeLayerItems(itemsAt(event->scenePos())), event);
|
||||||
|
|
||||||
if (views().first())
|
if (views().first())
|
||||||
views().first()->setFocus();
|
views().first()->setFocus();
|
||||||
@@ -229,19 +229,19 @@ void FormEditorScene::dropEvent(QGraphicsSceneDragDropEvent * event)
|
|||||||
|
|
||||||
void FormEditorScene::dragEnterEvent(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)
|
void FormEditorScene::dragLeaveEvent(QGraphicsSceneDragDropEvent * event)
|
||||||
{
|
{
|
||||||
currentTool()->dragLeaveEvent(removeLayerItems(items(event->scenePos())), event);
|
currentTool()->dragLeaveEvent(removeLayerItems(itemsAt(event->scenePos())), event);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormEditorScene::dragMoveEvent(QGraphicsSceneDragDropEvent * event)
|
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)
|
QList<QGraphicsItem *> FormEditorScene::removeLayerItems(const QList<QGraphicsItem *> &itemList)
|
||||||
@@ -255,10 +255,23 @@ QList<QGraphicsItem *> FormEditorScene::removeLayerItems(const QList<QGraphicsIt
|
|||||||
return itemListWithoutLayerItems;
|
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)
|
void FormEditorScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
if (editorView() && editorView()->model())
|
if (editorView() && editorView()->model())
|
||||||
currentTool()->mousePressEvent(removeLayerItems(items(event->scenePos())), event);
|
currentTool()->mousePressEvent(removeLayerItems(itemsAt(event->scenePos())), event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QTime staticTimer()
|
static QTime staticTimer()
|
||||||
@@ -275,9 +288,9 @@ void FormEditorScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
if (time.elapsed() > 30) {
|
if (time.elapsed() > 30) {
|
||||||
time.restart();
|
time.restart();
|
||||||
if (event->buttons())
|
if (event->buttons())
|
||||||
currentTool()->mouseMoveEvent(removeLayerItems(items(event->scenePos())), event);
|
currentTool()->mouseMoveEvent(removeLayerItems(itemsAt(event->scenePos())), event);
|
||||||
else
|
else
|
||||||
currentTool()->hoverMoveEvent(removeLayerItems(items(event->scenePos())), event);
|
currentTool()->hoverMoveEvent(removeLayerItems(itemsAt(event->scenePos())), event);
|
||||||
|
|
||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
@@ -286,7 +299,7 @@ void FormEditorScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
void FormEditorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
void FormEditorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
if (editorView() && editorView()->model()) {
|
if (editorView() && editorView()->model()) {
|
||||||
currentTool()->mouseReleaseEvent(removeLayerItems(items(event->scenePos())), event);
|
currentTool()->mouseReleaseEvent(removeLayerItems(itemsAt(event->scenePos())), event);
|
||||||
|
|
||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
@@ -295,7 +308,7 @@ void FormEditorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
void FormEditorScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
void FormEditorScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
if (editorView() && editorView()->model()) {
|
if (editorView() && editorView()->model()) {
|
||||||
currentTool()->mouseDoubleClickEvent(removeLayerItems(items(event->scenePos())), event);
|
currentTool()->mouseDoubleClickEvent(removeLayerItems(itemsAt(event->scenePos())), event);
|
||||||
|
|
||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
|
@@ -111,6 +111,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QList<QGraphicsItem *> removeLayerItems(const QList<QGraphicsItem *> &itemList);
|
QList<QGraphicsItem *> removeLayerItems(const QList<QGraphicsItem *> &itemList);
|
||||||
|
QList<QGraphicsItem *> itemsAt(const QPointF &pos);
|
||||||
|
|
||||||
AbstractFormEditorTool* currentTool() const;
|
AbstractFormEditorTool* currentTool() const;
|
||||||
void removeItemFromHash(FormEditorItem*);
|
void removeItemFromHash(FormEditorItem*);
|
||||||
|
Reference in New Issue
Block a user