0

我正在尝试在按钮单击事件上设置动画。但不知何故,动画不起作用。我参考了 Qt 参考文档,但找不到导致问题的根本原因

以下是示例代码:

void MainWindow::AnimationClick()
{
    // define toolbar y movement positions for animation
    TOOLBAR_Y_SHOWN = 0;
    TOOLBAR_Y_HIDDEN = -m_AnimatedWidget->height();
    m_AnimatedWidget = new AnimatedWidget(this);

    QPropertyAnimation *m_ani = new QPropertyAnimation(m_AnimatedWidget, "pos", this);

    m_ani->setDuration(500);

    m_ani->setEndValue(QPoint(m_AnimatedWidget->pos().x(), TOOLBAR_Y_HIDDEN));
    m_ani->setEasingCurve(QEasingCurve::InBack);

    m_ani->start();
}

通过上述实现,点击事件没有发生任何事情。任何建议,谢谢。

4

3 回答 3

2

这看起来不对:

TOOLBAR_Y_HIDDEN = -m_AnimatedWidget->height();
m_AnimatedWidget = new AnimatedWidget(this);

首先你访问m_AnimatedWidget 然后你分配它?

当您遇到崩溃(例如分段错误)时,请始终在调试器中运行您的程序。它会帮助你很容易地发现这个错误,因为它会在错误的行停止。

于 2012-10-04T09:29:28.727 回答
0

m_ani->setDuration(500);

setDuration()参数以毫秒表示。在测试时,您可能应该放置半秒以上。

于 2012-10-04T09:42:56.777 回答
0

我知道了。我不允许 m_AnimatedWidget 在屏幕上显示。以下是编辑后的片段。

void MainWindow::AnimationClick()
{
    // define toolbar y movement positions for animation
    TOOLBAR_Y_SHOWN = 0;
    m_AnimatedWidget = new AnimatedWidget(this);
    TOOLBAR_Y_HIDDEN = -m_AnimatedWidget->height();


    QPropertyAnimation *m_ani = new QPropertyAnimation(m_AnimatedWidget, "pos", this);

    m_ani->setDuration(5000);

    m_ani->setEndValue(QPoint(m_AnimatedWidget->pos().x(), TOOLBAR_Y_HIDDEN));
    m_ani->setEasingCurve(QEasingCurve::InBack);

    m_ani->start();
    m_AnimatedWidget->show();
}
于 2012-10-04T09:47:07.813 回答