PropertyAnimation на x изменяет значение y

Рассмотрим следующий Qt QML код:

import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 2.0

ApplicationWindow {
    id: mainWindow
    visible: true
    width: Screen.width / 5
    height: Screen.height

    x: 0
    y: 0

    PropertyAnimation on x {
        duration: 1000
        from: Screen.width
        to: Screen.width - mainWindow.width
    }

    Text {
        text: mainWindow.y
    }
}

Предполагается, что создать главное окно приложения и показать его перемещение из правой части экрана, так же, как Windows 8 правая боковая панель появляется при наведении мыши.

Однако, когда я запускаю этот код, окно не прикрепляется к верхней части экрана, т. е. значение y окна не 0.

Я добавил текстовый объект для отладки: если я комментирую блок PropertyAnimation, отображается 52 и окно прилипает к верхней части экрана. Если я раскомментирую блок PropertyAnimation, отобразится 62 и между окном и верхней частью экрана появится пробел.

Несмотря на нелогичное изменение значения y, анимация работает правильно.

Я пытался установить y: 0 после завершения анимации или добавления PropertyAnimation на y от 0 до 0, но это не решило проблему. Для меня это выглядит как ошибка в Qt QML.

Существует ли какой-либо обходной путь для этой проблемы?

1 ответ

  1. Я нашел обходной путь для этой проблемы.

    Настройка на корневом окне ApplicationWindow

    flags: Qt.BypassWindowManagerHint
    

    или

    flags: Qt.X11BypassWindowManagerHint
    

    решает проблему для меня. Обратите внимание, что проблема была воспроизведена на Ubuntu 16.04, я пытался воспроизвести его на Windows, без успеха.

    Я бы предложил использовать оба флага:

    flags: Qt.BypassWindowManagerHint | Qt.X11BypassWindowManagerHint
    

    Вот ссылка на документацию флага: http://doc.qt.io/qt-5/qt.html#WindowType-enum