Jak sprawić, aby widżety Qt zanikały lub zanikały?
Próbuję zanikać i wygasaćQLabel
lub o to chodziQWidget
podklasa. Próbowałem zQGraphicsEffect
, ale niestety działa dobrze tylko w systemie Windows, a nie na Macu.
Jedyne inne rozwiązanie, które może działać na komputerach Mac i Windows, wydaje się mieć mój własny zwyczajpaintEvent
gdzie ustawiam krycieQPainter
a także zdefiniowaćQ_PROPERTY
dla „nieprzezroczystości” w mojej pochodnejQLabel
i zmień krycie przezQPropertyAnimation
.
Wklejam poniżej odpowiedniego fragmentu kodu w celach informacyjnych. Nadal widzę tutaj problem - ponowne użycieQLabel::paintEvent
nie działa, działa tylko wtedy, gdy wykonam kompletny obraz niestandardowy za pomocąQPainter
, ale to nie wydaje się być łatwym sposobem i jeśli muszę to zrobić dla każdegoQWidget
podklasa, którą chcę wygasnąć, to koszmar. Proszę wyjaśnić, czy robię tutaj oczywiste błędy.
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);
}