Как получить сигнал, когда оконный менеджер завершил изменение размера окна в qt QML? - PullRequest
3 голосов
/ 22 мая 2019

Я пытаюсь добиться эффекта, аналогичного miniPlayer iTunes, когда изменение размера происходит в macOS.То есть, обнаруживая, когда изменение размера окна было завершено, ТО изменяет размер высоты до определенной ширины.Вот визуальный пример:

enter image description here

Проблема в том, что в окне QML не существует сигнала, который бы уведомил меня, когда оконный менеджер завершил изменение размера (чтопользователь отпустил ручку).Следовательно, если у меня нет сигнала и я применяю его, как только ширина или высота изменяется, окно будет мерцать (происходит двойное изменение размера), пока пользователь не отпустит ручку.

Спасибоза любой вклад или помощь!

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Вы можете довольно легко реализовать свой собственный дескриптор изменения размера, используя 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
        }
    }
}
0 голосов
/ 25 мая 2019

QML предоставил несколько сигналов NOTIFY, когда значения свойств должны быть обновлены. Таким образом, вы можете использовать Window.width и Window.height:

Window {
    id: window

    onWidthChanged: {
        // Will be executed after window.width value changes.
    }

    onHeightChanged: {
        // Will be executed after window.height value changes.
    }

    // Other window-related stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...