I am trying to fade in and fade out a QLabel
or for that matter any QWidget
subclass. I have tried with QGraphicsEffect
, but unfortunately it works well only on Windows and not on Mac.
The only other solution which can work on both Mac & Windows seems to be having my own custom paintEvent
where I set the opacity of QPainter
and also define a Q_PROPERTY
for "opacity" in my derived QLabel
and change the opacity through QPropertyAnimation
.
I am pasting below the relevant code snippet for your reference. I still see an issue here - reusing the QLabel::paintEvent
doesn't seem to be working, it works only if I do a complete custom painting using the QPainter
, but that doesn't seem to be an easy way and if I need to do that for every QWidget
subclass I want to fade out, that's a nightmare. Please clarify if I am doing any obvious mistakes here.
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);}