diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml index 73f4846e9cb..f3c7dc3429e 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml @@ -42,12 +42,23 @@ Window { property alias showEditLight: editLightCheckbox.checked property alias usePerspective: usePerspectiveCheckbox.checked + signal objectClicked(var object) + Rectangle { id: sceneBg color: "#FFFFFF" anchors.fill: parent focus: true + TapHandler { // check tapping/clicking an object in the scene + onTapped: { + var pickResult = editView.pick(eventPoint.scenePosition.x, + eventPoint.scenePosition.y); + if (pickResult.objectHit) + viewWindow.objectClicked(pickResult.objectHit); + } + } + View3D { id: editView anchors.fill: parent diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index b8aabfffc76..ff4bb7e84dd 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -75,7 +75,7 @@ static QVariant objectToVariant(QObject *object) return QVariant::fromValue(object); } -static QObject *createEditView3D(QQmlEngine *engine) +QObject *Qt5InformationNodeInstanceServer::createEditView3D(QQmlEngine *engine) { QmlDesigner::Internal::CameraControlHelper *helper = new QmlDesigner::Internal::CameraControlHelper(); engine->rootContext()->setContextProperty("designStudioNativeCameraControlHelper", helper); @@ -89,6 +89,8 @@ static QObject *createEditView3D(QQmlEngine *engine) return nullptr; } + QObject::connect(window, SIGNAL(objectClicked(QVariant)), this, SLOT(objectClicked(QVariant))); + //For macOS we have to use the 4.1 core profile QSurfaceFormat surfaceFormat = window->requestedFormat(); surfaceFormat.setVersion(4, 1); @@ -99,6 +101,11 @@ static QObject *createEditView3D(QQmlEngine *engine) return window; } +void Qt5InformationNodeInstanceServer::objectClicked(const QVariant &object) { + QObject *item = qobject_cast(object.value()); + selectInstance(instanceForObject(item)); +} + Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) : Qt5NodeInstanceServer(nodeInstanceClient) { diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index 6f05659426e..2e39339583a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -44,6 +44,9 @@ public: void removeSharedMemory(const RemoveSharedMemoryCommand &command) override; void changeSelection(const ChangeSelectionCommand &command) override; +public slots: + void objectClicked(const QVariant &object); + protected: void collectItemChangesAndSendChangeCommands() override; void sendChildrenChangedCommand(const QList &childList); @@ -54,6 +57,7 @@ protected: void modifyProperties(const QVector &properties); private: + QObject *createEditView3D(QQmlEngine *engine); void setup3DEditView(const QList &instanceList); QObject *findRootNodeOf3DViewport(const QList &instanceList) const; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 7200231267a..ed63caec5ac 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -1329,7 +1329,6 @@ void NodeInstanceView::childrenChanged(const ChildrenChangedCommand &command) if (!model()) return; - QVector childNodeVector; foreach (qint32 instanceId, command.childrenInstances()) { @@ -1396,6 +1395,7 @@ void NodeInstanceView::sendToken(const QString &token, int number, const QVector void NodeInstanceView::selectionChanged(const ChangeSelectionCommand &command) { + clearSelectedModelNodes(); foreach (const qint32 &instanceId, command.instanceIds()) { if (hasModelNodeForInternalId(instanceId)) selectModelNode(modelNodeForInternalId(instanceId));