Как заставить виджеты Qt исчезать или исчезать?
Я пытаюсь исчезнуть и исчезнутьQLabel
или в этом отношении любойQWidget
подкласс. Я пробовал сQGraphicsEffect
, но, к сожалению, он хорошо работает только на Windows, а не на Mac.
Единственное другое решение, которое может работать как на Mac, так и на Windows, кажется, имеет свой собственныйpaintEvent
где я установил непрозрачностьQPainter
а также определитьQ_PROPERTY
за "непрозрачность» в моем производномQLabel
и измените непрозрачность до конца.QPropertyAnimation
Я вставляю ниже соответствующий фрагмент кода для вашей справки. Я все еще вижу проблему здесь - повторное использованиеQLabel::paintEvent
Безразлично»Кажется, что это работает, это работает, только если я делаю полную пользовательскую живопись, используяQPainter
но это некажется, легкий путь, и если мне нужно сделать это для каждогоQWidget
подкласс я хочу исчезнуть, чтоэто кошмар. Пожалуйста, уточните, если я делаю какие-либо очевидные ошибки здесь.
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);
}