我试图淡入和淡出一个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);
}