diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp index b8913546647..9519b2b08f0 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp @@ -176,17 +176,27 @@ FormEditorItem* AbstractFormEditorTool::nearestFormEditorItem(const QPointF &poi if (formEditorItem && formEditorItem->flowHitTest(point)) return formEditorItem; - if (!formEditorItem || !formEditorItem->qmlItemNode().isValid()) + if (!formEditorItem) + continue; + auto qmlItemNode = formEditorItem->qmlItemNode(); + if (!qmlItemNode.isValid()) continue; if (formEditorItem->parentItem() && !formEditorItem->parentItem()->isContentVisible()) continue; - if (formEditorItem && ModelUtils::isThisOrAncestorLocked(formEditorItem->qmlItemNode().modelNode())) + if (formEditorItem && ModelUtils::isThisOrAncestorLocked(qmlItemNode.modelNode())) continue; if (!nearestItem) nearestItem = formEditorItem; + + if (!qmlItemNode.instanceIsVisible() && nearestItem->qmlItemNode().instanceIsVisible()) + continue; + + if (qmlItemNode.instanceIsVisible() && !nearestItem->qmlItemNode().instanceIsVisible()) + nearestItem = formEditorItem; + else if (formEditorItem->selectionWeigth(point, 1) < nearestItem->selectionWeigth(point, 0)) nearestItem = formEditorItem; }