当窗口管理器在 qt QML 中调整窗口大小时如何获得信号?

N.D*_*.D. 5 c++ qt resize window qml

在 macOS 上调整大小时,我试图达到与 iTunes 的 miniPlayer 类似的效果。也就是说,检测窗口的大小调整何时完成,然后将高度更改为某个值。这是一个视觉示例:

在此处输入图片说明

问题是当窗口管理器完成调整大小(即用户释放句柄)时,QML 窗口中不存在通知我的信号。因此,如果我没有信号并在调整大小期间更改宽度或高度后立即应用我的高度更改,则只要用户没有释放手柄,窗口就会闪烁(发生双重调整大小)。

感谢您的任何输入或帮助!

fal*_*erd 3

您可以非常轻松地实现自己的调整大小句柄,使用 MouseArea 并使用 onReleased 处理最终的调整大小计算(此处强制释放时高度为宽度的 75%):

Window {
    id: window
    flags: Qt.FramelessWindowHint
    visible: true
    height: 300
    width: 400

    MouseArea {
        id: resize
        anchors {
            right: parent.right
            bottom: parent.bottom
        }
        width: 15
        height: 15
        cursorShape: Qt.SizeFDiagCursor

        property point clickPos: "1,1"

        onPressed: {
            resize.clickPos  = Qt.point(mouse.x,mouse.y)
        }

        onPositionChanged: {
            var delta = Qt.point(mouse.x-resize.clickPos.x, mouse.y-resize.clickPos.y)
            window.width += delta.x;
            window.height += delta.y;
        }

        onReleased: {
            window.height = .75 * window.width
        }

        Rectangle {
            id: resizeHint
            color: "red"
            anchors.fill: resize
        }
    }
}
Run Code Online (Sandbox Code Playgroud)