我正在尝试淡入淡出一个QLabel
或者其他任何QWidget
的子类。 我已经尝试使用QGraphicsEffect
,但不幸的是它只能在Windows上运行良好,在Mac上不行。
唯一可以在Mac和Windows上都可用的解决方案似乎是拥有我的自定义paintEvent
,在其中设置QPainter
的不透明度,并在我的派生QLabel
中定义“opacity”的Q_PROPERTY
,并通过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);
}