Quantcast
Channel: Qt DevNet forums: Qt Quick 1283365070**
Viewing all articles
Browse latest Browse all 4972

Timing issue with draganddrop and reparenting

$
0
0
Hi folks, I encountered a “timing-issue” and unfortunately I don’t have an idea how to solve it. Setup: I have a rectangle which can be dragged around with the mouse and there is a DropArea where the rectangle can be dropped. The DropArea has a Layout where the dropped rectangle should be placed in. A dropped rectangle “arrives” at the onDropped-handler of the DropArea. Here a new parent should be set to the rectangle (see lines 145 – 148). A ParentChange-state is attached to the drag-rectangle. The change of the parent ensures, that the dragged rectangle is visible all the time when it is dragged around. When the drag finishes by releasing the mouse the rectangle is returned to its old parent. (see lines 94 – 102) Now the problem: The 2 described mechanisms interfere somehow. Setting a new parent in the drop-handler does not work if the ParentChange is active too. Both mechanisms standalone work perfectly. Below the is my source-code, if someone wants to try it out. What can be done to solve this issue? Thanks in advance. Best regards Kai import QtQuick 2.3 import QtQuick.Window 2.2 import QtQuick.Layouts 1.1   Window {     visible: true     width: 600     height: 360       Rectangle {         id: globalBase         anchors.fill: parent         radius: 5           border {             color: "red"             width:  2         }           Text {             anchors {                 left: parent.left                 top: parent.top                 topMargin: 10                 leftMargin: 10             }               text: "base"         }           RowLayout {               spacing: 10             anchors.fill: parent             anchors.margins: 50               Rectangle {                   id: dragRect                   radius: 5                 border {                     color: "green"                     width:  2                 }                   Layout.fillWidth: true                 Layout.fillHeight: true                   Text {                     anchors {                         left: parent.left                         top: parent.top                         topMargin: 10                         leftMargin: 10                     }                       text: "Drag Area"                 }                   ColumnLayout {                     anchors.horizontalCenter: parent.horizontalCenter                     anchors.bottom: parent.bottom                     anchors.bottomMargin: 0                     spacing: 2                       Rectangle {                         width: 50                         height: 50                         color: "yellow"                     }                       Rectangle {                         id: dragTile                           width: 50                         height: 50                           radius: 5                         border {                             color: "green"                             width:  2                         }                           Drag.active: mouseArea.drag.active                         Drag.hotSpot.x: 10                         Drag.hotSpot.y: 10                           Text {                             anchors.centerIn: parent                             text: "drag"                         }                           states: [                             State {                                 when: mouseArea.drag.active                                 ParentChange {                                     target: dragTile                                     parent: globalBase                                 }                             }                         ]                           MouseArea {                             id: mouseArea                             anchors.fill: parent                             drag.target: dragTile                               onReleased: {                                 dragTile.Drag.drop()                             }                         }                     }                 }             }               Rectangle {                   id: dropRect                   radius: 5                 border {                     color: "blue"                     width:  2                 }                   Layout.fillWidth: true                 Layout.fillHeight: true                     Text {                     anchors {                         left: parent.left                         top: parent.top                         topMargin: 10                         leftMargin: 10                     }                       text: "Drop Area"                 }                   DropArea {                     anchors.fill: parent                       onDropped: {                         drop.accept()                         drop.source.parent = myLayout                     }                       ColumnLayout {                         id: myLayout                           anchors.horizontalCenter: parent.horizontalCenter                         anchors.bottom: parent.bottom                         anchors.bottomMargin: 0                         spacing: 2                           Rectangle {                             width: 50                             height: 50                             color: "yellow"                         }                     }                 }             }         }     } }

Viewing all articles
Browse latest Browse all 4972

Trending Articles