¿Cómo hacer que los widgets Qt se atenúen o desaparezcan?

Estoy tratando de desvanecerme y desvanecermeQLabel o para el caso cualquierQWidget subclase Lo he intentado conQGraphicsEffect, pero desafortunadamente solo funciona bien en Windows y no en Mac.

La única otra solución que puede funcionar tanto en Mac como en Windows parece tener mi propia costumbrepaintEvent donde pongo la opacidad deQPainter y también definir unaQ_PROPERTY por "opacidad" en mi derivadaQLabel y cambiar la opacidad a través deQPropertyAnimation.

Estoy pegando debajo del fragmento de código relevante para su referencia. Todavía veo un problema aquí - reutilizando elQLabel::paintEvent no parece estar funcionando, solo funciona si hago una pintura personalizada completa con elQPainter, pero eso no parece ser una manera fácil y si tengo que hacerlo para cadaQWidget subclase quiero desvanecerme, eso es una pesadilla. Por favor aclare si estoy cometiendo algún error obvio aquí.

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);
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta