Jak sprawić, aby widżety Qt zanikały lub zanikały?

Próbuję zanikać i wygasaćQLabel lub o to chodziQWidget podklasa. Próbowałem zQGraphicsEffect, ale niestety działa dobrze tylko w systemie Windows, a nie na Macu.

Jedyne inne rozwiązanie, które może działać na komputerach Mac i Windows, wydaje się mieć mój własny zwyczajpaintEvent gdzie ustawiam krycieQPainter a także zdefiniowaćQ_PROPERTY dla „nieprzezroczystości” w mojej pochodnejQLabel i zmień krycie przezQPropertyAnimation.

Wklejam poniżej odpowiedniego fragmentu kodu w celach informacyjnych. Nadal widzę tutaj problem - ponowne użycieQLabel::paintEvent nie działa, działa tylko wtedy, gdy wykonam kompletny obraz niestandardowy za pomocąQPainter, ale to nie wydaje się być łatwym sposobem i jeśli muszę to zrobić dla każdegoQWidget podklasa, którą chcę wygasnąć, to koszmar. Proszę wyjaśnić, czy robię tutaj oczywiste błędy.

Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity)

void MyLabel::setOpacity(qreal value) {
    m_Opacity = value;
    repaint();
}

void MyLabel::paintEvent((QPaintEvent *pe) {
    QPainter p;
    p.begin(this);
    p.setOpacity();
    QLabel::paintEvent(pe);
    p.end();
}

void MyLabel::startFadeOutAnimation() {
    QPropertyAnimation *anim = new QPropertyAnimation(this, "opacity");
    anim->setDuration(800);
    anim->setStartValue(1.0);
    anim->setEndValue(0.0);
    anim->setEasingCurve(QEasingCurve::OutQuad);
    anim->start(QAbstractAnimation::DeleteWhenStopped);
}

questionAnswers(3)

yourAnswerToTheQuestion