需要拖动自定义菜单栏时,若窗口在最大化状态即先进行窗口化再移动
Rectangle {
id: background_menuBar
width: parent.width
height: 40
color: mainWindow.active ? "#3C3C3C" : "#323233"
MouseArea {
id: menuBarMouseArea
x: 0
y: 0
width: mainWindow.width
height: mainWindow.height
acceptedButtons: Qt.LeftButton
property int pressedX
property int pressedY
//记录鼠标在区域内按下时坐标
onPressed: function(mouse){
pressedX = mouse.x
pressedY = mouse.y
}
onPositionChanged: function(mouse){
//移动主窗口位置为原位置+差异值
if(visibility==4){
//记录点击位置与最大化时窗口宽高的比值
var xRatio = pressedX / mainWindow.width
var yRatio = pressedY / mainWindow.height
//窗口化
visibility = "Windowed"
//算出窗口化后同比值的镜像点
var mirrorX = xRatio * mainWindow.width + mainWindow.x
var mirrorY = yRatio * mainWindow.height + mainWindow.y
//原点击位置与镜像点的差值
mainWindow.x += pressedX - mirrorX
mainWindow.y += pressedY - mirrorY
//拖动使得窗口化后,因mouseXY是当前窗口的相对坐标位置
//之前记录的pressedXY是最大化时的,需要进行同比缩小
menuBarMouseArea.pressedX = xRatio * mainWindow.width
menuBarMouseArea.pressedY = yRatio * mainWindow.height
return
}
mainWindow.x = mainWindow.x + (mouse.x - pressedX)
mainWindow.y = mainWindow.y + (mouse.y - pressedY)
}
}