x 上的 PropertyAnimation 改变 y 值

PropertyAnimation on x changes y value

考虑以下 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
    }
}

它应该创建应用程序的主要 window 并显示它从屏幕右侧移出,很像 Windows 8 右侧面板出现在鼠标悬停时。

然而,当我运行这段代码时,window没有附加到屏幕的顶部,即window的y值不是0。

出于调试目的,我添加了 Text 对象:如果我注释掉 PropertyAnimation 块,则会显示 52,并且 window 会固定在屏幕顶部。如果我取消注释 PropertyAnimation 块,将显示 62 并且 window 和屏幕顶部之间有一个 space。

尽管 y 值发生了违反直觉的变化,但动画正常工作。

我试过在动画完成后设置 y: 0 或在 y 上添加 PropertyAnimation 从 0 到 0,但这并没有解决问题。对我来说,它看起来像是 Qt QML 中的一个错误。

这个问题有解决办法吗?

我找到了解决该问题的方法。

在根 ApplicationWindow 上设置

flags: Qt.BypassWindowManagerHint

flags: Qt.X11BypassWindowManagerHint

帮我解决了这个问题。请注意,该问题是在 Ubuntu 16.04 上重现的,我曾尝试在 Windows 上重现它,但没有成功。

我建议同时使用这两个标志:

flags: Qt.BypassWindowManagerHint | Qt.X11BypassWindowManagerHint

这是 flag 文档的 link:http://doc.qt.io/qt-5/qt.html#WindowType-enum