将矩形附着到QML中的移动矩形并将其拆离

将矩形附着到QML中的移动矩形并将其拆离,qml,qt,animation,qtquick2,Qml,Qt,Animation,Qtquick2,我想实现这一点,只要我按下一个按钮,两个矩形一起移动,但一旦我释放它,其中一个矩形就停留在释放时的位置 将移动的矩形设为主矩形,其代码如下: 矩形{ 身份证:船长 x:10 y:10 宽度:50 身高:50 颜色:“00ff00” x上的行为{ 数字化{ 持续时间:2000年 } } } 只要按下按钮,应随主机移动的从机代码如下: 矩形{ id:奴隶 x:100 y:100 宽度:50 身高:50 颜色:“ff0000” } 目前,我已尝试将从属设备连接到主设备并将其分离: 切换按钮{ id

我想实现这一点,只要我按下一个按钮,两个矩形一起移动,但一旦我释放它,其中一个矩形就停留在释放时的位置

将移动的
矩形
设为主矩形,其代码如下:

矩形{
身份证:船长
x:10
y:10
宽度:50
身高:50
颜色:“00ff00”
x上的行为{
数字化{
持续时间:2000年
}
}
}
只要按下按钮,应随主机移动的从机代码如下:

矩形{
id:奴隶
x:100
y:100
宽度:50
身高:50
颜色:“ff0000”
}
目前,我已尝试将从属设备连接到主设备并将其分离:

切换按钮{
id:附件
x:300
y:300
正文:qsTr(“附件”)
再次点击:{
如果(选中){
slave.parent=master
}否则{
slave.parent=main窗口
}
}
}
问题是,如果主设备已经移动,按下按钮将使从属设备跳到从一开始随主设备一起移动时的位置,然后即使松开按钮也会继续随主设备一起移动


如何将其他对象任意附加到移动对象上,然后将其拆离?

您将从属对象附加为主对象的子对象的方法是导致跳转的原因。一旦从机被重新租用,它的x和y值为100,将其放置在与其新的父级
主级
相关的位置,而不是与主窗口相关的位置

重新绘制时,需要将从属对象相对于主对象的x和y设置为x和y从主窗口坐标系到主对象坐标系的平移。查看
Item::mapFromItem
Item::mapToItem
以了解如何将
main窗口中的从机的x和y值100转换到屏幕上相同的物理位置,但要使用新的父级
master

注意,当停止拖动并将从属设备重新分配回主窗口时,您需要反向执行相同的操作

下面是一些代码更新的快照:

ToggleButton {
    id: attach
    x: 300
    y: 300
    text: qsTr("Attach")

    onClicked: {
        if (checked) {
            var newPoint = mainWindow.contentItem.mapToItem(master, slave.x, slave.y);
            slave.parent = master;
            slave.x = newPoint.x;
            slave.y = newPoint.y;
        } else {
            var newPoint = master.mapToItem(mainWindow.contentItem, slave.x, slave.y);
            slave.parent = mainWindow.contentItem;
            slave.x = newPoint.x;
            slave.y = newPoint.y;
        }
    }
}

它工作得非常好。谢谢同时,我也意识到了为什么在松开按钮后,
从机
继续与
主机
一起移动。如果
main窗口
窗口
,则在重新租用
从属
时,应使用其
contentItem
,即
slave.parent=mainWindow.contentItem