import QtQuick 2.12
import QtQuick.Controls 2.3
import QtQuick.Window 2.3
Window {
id: window
visible: true
flags: Qt.FramelessWindowHint
width: 300
height: 300
color: "white"
property int bw: 3
function toggleMaximized() { //切换最大化
if (window.visibility === Window.Maximized) {
window.showNormal();
} else {
window.showMaximized();
}
}
onYChanged: {
if (y > Screen.desktopAvailableHeight - 30) {
window.showMinimized()
}
}
onVisibilityChanged: {
if (window.visibility === Window.Windowed) {
window.x = (Screen.desktopAvailableWidth-width)/2
window.y = (Screen.desktopAvailableHeight-height)/2
}
}
// The mouse area is just for setting the right cursor shape
MouseArea {
anchors.fill: parent
hoverEnabled: true
cursorShape: {
const p = Qt.point(mouseX, mouseY);
const b = bw + 10; // Increase the corner size slightly
if (p.x < b && p.y < b) return Qt.SizeFDiagCursor;
if (p.x >= width - b && p.y >= height - b) return Qt.SizeFDiagCursor;
if (p.x >= width - b && p.y < b) return Qt.SizeBDiagCursor;
if (p.x < b && p.y >= height - b) return Qt.SizeBDiagCursor;
if (p.x < b || p.x >= width - b) return Qt.SizeHorCursor;
if (p.y < b || p.y >= height - b) return Qt.SizeVerCursor;
}
acceptedButtons: Qt.NoButton // don't handle actual events
}
DragHandler {
id: resizeHandler
grabPermissions: TapHandler.TakeOverForbidden
target: null
onActiveChanged: if (active) {
const p = resizeHandler.centroid.position;
const b = bw + 10; // Increase the corner size slightly
let e = 0;
if (p.x < b) { e = Qt.LeftEdge }
if (p.x >= width - b) { e = Qt.RightEdge }
if (p.y < b) { e = Qt.TopEdge }
if (p.y >= height - b) { e = Qt.BottomEdge }
window.startSystemResize(e);
}
}
ToolBar {
id: toolBar
width: parent.width-2*bw
height: 30
x:bw;y:bw
Item {
anchors.fill: parent
TapHandler {
onTapped: if (tapCount === 2) toggleMaximized()
gesturePolicy: TapHandler.DragThreshold
}
DragHandler {
grabPermissions: TapHandler.CanTakeOverFromAnything
onActiveChanged: if (active) { window.startSystemMove() }
}
}
}
}
qml窗口去边框后的全套处理
于 2024-02-29 22:04:03 首次发布