Quantcast
Channel: Active questions tagged qpainter - Stack Overflow
Viewing all articles
Browse latest Browse all 58

How to make Qt widgets fade in or fade out?

$
0
0

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

Viewing all articles
Browse latest Browse all 58

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>