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