Qt QWidget隐藏动画

时间:2014-05-12 14:28:59

标签: c++ qt animation qwidget

我有一个QWidget的子类,它是一个弹出窗口小部件。我想在它显示和消失时添加一些动画。所以我重新实施了showEvent(QShowEvent * event)hideEvent,并在函数中添加了一些QPropertyAnimationshowEvent对我来说很好,但hideEvent没有。因为

  

隐藏事件会在隐藏后立即发送到窗口小部件。

关于如何做的任何想法?

更新

我认为这不是正确的理由。当我使用Nejat的解决方案时。节目部分有效。但是当我在小部件外面点击时。它立即消失。

2 个答案:

答案 0 :(得分:1)

您可以覆盖窗口小部件中的eventFilter并检查QEvent::ShowQEvent::Close个事件。

bool MyWidget::eventFilter(QObject * obj, QEvent * event)
{
    if(obj == this && event->type() == QEvent::Show)
    {
        //about to show
    }
    else if(obj == this && event->type() == QEvent::Close)
    {
        //about to close
    }


    return false;
}

您还应该通过以下方式在构造函数中安装事件过滤器:

this->installEventFilter(this);

答案 1 :(得分:1)

你应该覆盖devtools.dll所以当试图立即关闭时它将被忽略并且我们开始动画并且在完成(QWidget::closeEvent())之后我们正常关闭小部件。

这是一个演示的演示:

QPropertyAnimation::finished()

enter image description here