考虑以下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.
我已添加Text对象以进行调试:如果我注释掉PropertyAnimation块,则会显示52并且窗口会粘到屏幕顶部。如果我取消注释PropertyAnimation块,则会显示62,并且窗口和屏幕顶部之间有一个空格。
尽管y值发生了违反直觉的变化,但动画仍能正常运作。
我试图在动画完成后设置y:0或在y上从0添加PropertyAnimation,但这还没有解决问题。对我来说,它看起来像是Qt QML中的一个错误。
此问题是否有解决方法?
答案 0 :(得分:0)
我找到了解决问题的方法。
在根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