关闭/重新开启QML ApplicationWindow使得RotationAnimator变得疯狂

时间:2017-06-22 18:32:14

标签: c++ qml qt5 qtquick2

我有一个非常奇怪的行为,我已经最小化到一个最小的例子,并希望有人可以有一些知识。

我有一个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上的应用程序中的所有动画都被打破了。

0 个答案:

没有答案