私はフェードインしようとしており、QLabel
をフェードアウトしようとしています。それに関しては、QWidget
サブクラスです。私はQGraphicsEffect
で試してみましたが、残念ながらWindowsではうまく動作し、Macではうまく動作しません。Qtウィジェットをフェードインまたはフェードアウトするにはどうすればいいですか?
両方マック& Windowsは、私がQPainter
の不透明度を設定し、また私の派生QLabel
で「不透明度」のQ_PROPERTY
を定義し、QPropertyAnimation
て不透明度を変更する独自のカスタムpaintEvent
を持っているように見える上で動作することができる唯一の他のソリューション。
参考のため、適切なコードスニペットの下に貼り付けています。私はまだここに問題が見えます - 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);
}
のQt APIは、あなたがそれを使用することを意図していなかった方法でそれを使用しているあなたを語っています。ウィジェットは、そのようなコンテンツをアニメートしたいときには素晴らしいパフォーマーではありません。概念実証のためにはうまくいくかもしれませんが、長期的にはQt Quickを使用する必要があります。 Qt Quick 1またはQt Quick 2のどちらを使用するかはあなた次第です.Qt Quick 1(宣言モジュール)でさえも、あなたがやっていることを改善するでしょう。 –