Qt-quick(qml)实现窗口和物体的拖动
*在实现窗口的拖动时,是在去掉窗口标题栏情况下完成的,当有窗口标题栏后无法展示窗口拖动效果。*
代码实现如下:
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
id: mainWindow
visible: true
width: 900
height: 600
title: qsTr("Hello World")
flags: Qt.Window | Qt.FramelessWindowHint //去标题栏
// Rectangle {
// id: rect1
// x: 12; y: 12
// width: 76; height: 96
// color: "lightsteelblue"
// }
MouseArea { //为窗口添加鼠标事件
anchors.fill: parent
acceptedButtons: Qt.LeftButton //只处理鼠标左键
property point clickPos: "0,0"
onPressed: { //接收鼠标按下事件
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: { //鼠标按下后改变位置
//鼠标偏移量
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
//如果mainwindow继承自QWidget,用setPos
mainWindow.setX(mainWindow.x+delta.x)
mainWindow.setY(mainWindow.y+delta.y)
// rect1.x = rect1.x + delta.x
// rect1.y = rect1.y + delta.y
}
}
}
实现窗体内物体的拖动
有无标题栏都可以
代码实现如下:
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
id: mainWindow
visible: true
width: 900
height: 600
title: qsTr("Hello World")
//flags: Qt.Window | Qt.FramelessWindowHint //去标题栏
Rectangle {
id: rect1
x: 12; y: 12
width: 76; height: 96
color: "lightsteelblue"
MouseArea { //为窗口添加鼠标事件
anchors.fill: parent
acceptedButtons: Qt.LeftButton //只处理鼠标左键
property point clickPos: "0,0"
onPressed: { //接收鼠标按下事件
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: { //鼠标按下后改变位置
//鼠标偏移量
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
//如果mainwindow继承自QWidget,用setPos
// mainWindow.setX(mainWindow.x+delta.x)
// mainWindow.setY(mainWindow.y+delta.y)
rect1.x = rect1.x + delta.x
rect1.y = rect1.y + delta.y
}
}
}
}
效果如下,可拖动方块: