Search code examples
qtanimationqt5signalsqpropertyanimation

How to detect when QPropertyAnimation finishes?


I have a code:

void testbutton::buttonPressEvent(bool pressed_arg){
    QPropertyAnimation *animation = new QPropertyAnimation(m_button_bg, "size", this);
    animation->setDuration(500);
    animation->setEasingCurve(QEasingCurve::InCurve);
    int maxwidth = mwidth;
    if(pressed_arg == true)
        {
            animation->setStartValue(QSize(m_button_bg->width(), 39));
            animation->setEndValue(QSize(39, 39));
            pressed = false;
            animation->start();


         }
    else{
        animation->setStartValue(QSize(m_button_bg->width(), 39));
        animation->setEndValue(QSize(maxwidth, 39));
        pressed = true;
        text_button->show();
        animation->start();

    }
}

I want the text_button to be hidden after the end of the animation from the pressed_arg == true option, because the animation itself cannot do this due to the fact that this button contains text and cannot be compressed to zero, so I want to track the end of the animation and then apply text_button->hide().

How can I do that?

P.S: the animation compresses the frame in which this button is located.

I tried:

animation->start();
text_button->hide();

but the button disappeared right when the animation started, and it doesn't look like I expected it.


Solution

  • QPropertyAnimation inherits QAbstractAnimation which provides a finished signal, connect it to a your text_button's hide method.

    connect(animation, &QPropertyAnimation::finished, text_button, &QPushButton::hide );
    

    see this for more information.