Como fazer com que os widgets do Qt desapareçam ou desapareçam?
Eu estou tentando desaparecer e desaparecerQLabel
ou para esse assunto qualquerQWidget
subclasse. Eu tentei comQGraphicsEffect
, mas infelizmente funciona bem apenas no Windows e não no Mac.
A única outra solução que pode funcionar tanto no Mac quanto no Windows parece ter meu própriopaintEvent
onde eu defino a opacidade deQPainter
e também definir umQ_PROPERTY
para "opacidade" no meu derivadoQLabel
e mudar a opacidade atravésQPropertyAnimation
.
Estou colando abaixo do snippet de código relevante para sua referência. Eu ainda vejo um problema aqui - reutilizando oQLabel::paintEvent
parece não estar funcionando, só funciona se eu fizer uma pintura personalizada completa usando oQPainter
, mas isso não parece ser uma maneira fácil e se eu precisar fazer isso para cadaQWidget
subclasse eu quero desaparecer, isso é um pesadelo. Por favor, esclareça se estou cometendo algum erro óbvio aqui.
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);
}