我试图淡入和淡出一个QLabel或任何子QWidget类。我已经尝试过QGraphicsEffect,但不幸的是它只在 Windows 上运行良好,在 Mac 上不行。
唯一可以在 Mac 和 Windows 上运行的其他解决方案似乎有我自己的自定义paintEvent,我在其中设置不透明度,QPainter并Q_PROPERTY在派生中定义“不透明度”QLabel并通过QPropertyAnimation.
我将粘贴在相关代码段下方供您参考。我仍然在这里看到一个问题 - 重用似乎QLabel::paintEvent不起作用,只有当我使用我想淡出子类,那是一场噩梦。请澄清我是否在这里犯了任何明显的错误。QPainterQWidget
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);
}