我有一个非常奇怪的行为,我已经最小化到一个最小的例子,并希望有人可以有一些知识。
我有一个QML ApplicationWindow
我偶尔会想要根据按下的按钮或其他内容来显示。该窗口包含一个Image
RotationAnimator
,在窗口第一次可见时工作正常。但是,如果我将其关闭并从某种事件中重新打开(例如,单击系统托盘菜单),则动画会以非常快的速度旋转并旋转。这只发生在Windows上,但在Mac上运行正常。
我在https://github.com/rubu/QtRotationAnimatorDemo上举办了一个小例子。
相关部分 - qml:
import QtQuick 2.8
import QtQuick.Controls 2.1
ApplicationWindow
{
id: window
visible: true
width : 400
height : 400
Connections
{
target: applicationContext
onShowWindow:
{
window.show()
}
}
Image
{
anchors.centerIn: parent
source: "./ring.png"
RotationAnimator on rotation
{
id: rotationAnimation
loops: Animation.Infinite
duration: 2000
from: 0 ; to: 360
onRunningChanged:
{
console.log("animation running: " + rotationAnimation.running + " " + rotationAnimation.duration + " " + rotationAnimation.loops)
}
onPausedChanged:
{
console.log("animation paused: " + rotationAnimation.running + " " + rotationAnimation.duration + " " + rotationAnimation.loops)
}
}
}
}
main.cpp
-
#include "ApplicationContext.h"
#include <QApplication>
#include <QSystemTrayIcon>
int main(int argc, char *argv[])
{
QApplication Application(argc, argv);
QApplicationContext ApplicationContext;
Application.setQuitOnLastWindowClosed(false);
QSystemTrayIcon SystemTrayIcon;
ApplicationContext.connect(&SystemTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(SystemTrayMenuActivated(QSystemTrayIcon::ActivationReason)));
SystemTrayIcon.setIcon(QIcon("icon.png"));
SystemTrayIcon.show();
return Application.exec();
}
加载qml并弹出窗口的上下文类 -
#include "ApplicationContext.h"
#include <QQmlContext>
QApplicationContext::QApplicationContext()
{
m_QmlApplicationEngine.rootContext()->setContextProperty("applicationContext", this);
m_QmlApplicationEngine.load("QtRotationAnimationDemo.qml");
}
void QApplicationContext::SystemTrayMenuActivated(QSystemTrayIcon::ActivationReason eActivationReason)
{
emit showWindow();
}
对我来说似乎是一个错误,即使我同意窗口的生命周期有点奇怪 - 它实际上已经关闭然后再次显示(但是它再次响应信号,所以它最终还活着)
我会做更多的调试并可能在Qt上发布一个错误,但如果有人有任何相关的想法,我会非常感激,因为现在我在Windows上的应用程序中的所有动画都被打破了。