在窗口内拖拽控件的实现在上一篇文章中已经讲解过了,这篇文章讲解如何将控件拖拽到窗口外。控件是不能脱离窗口区域渲染的,所以我们需要为拖拽过程中的控件创建一个窗口。实现的主要思路如下:
- 为拖拽过程中的控件创建window。
- 修改拖拽控件的宿主为新创建的window。
- 根据MouseArea接收到移动坐标修改window显示位置。
- 如果拖拽控件停留在主window中,那么修改拖拽控件的宿主为主window。
创建窗口
为了能将控件拖拽到主窗口外,这里需要为他创建新的窗口。
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Window{
id:subWindow
flags: Qt.FramelessWindowHint
Rectangle{
id:subContainer
anchors.fill: parent
color: "grey"
}
}
}
subWindow就是为展示拖拽控件创建的,他内部有一个subContainer容器。我们在拖拽控件的过程中将宿主修改为subContainer,这时就可以在主窗口为展示拖拽控件了。
修改控件宿主
这里在接收到数据按下事件的时候进行宿主修改。
Rectangle{
id:rect
width: 100
height: 100
x:0
y:0
color: "green"
z:100
MouseArea{
anchors.fill:parent
property real lastX: 0
property real lastY: 0
property var draggingWindow:null
onPressed: {
var coordinate = mapToGlobal(mouseX,mouseY)
lastX = coordinate.x
lastY = coordina