首页 > 解决方案 > 用于旋转 QWidget 的 QPropertyAnimation

问题描述

我是 Qt 的新手,我在QWidget旋转时遇到了一些问题。

我在 QLabel 中有一个 QPixmap。我想要的是让它连续旋转 90 度。

我知道QPropertyAnimation并且我知道如何使用它,但我正在努力解决如何使用它来旋转QWidget. 有没有什么简单的方法可以实现我的目标并用动画旋转整个QLabel或内部?QPixmap谢谢你。

标签: qtanimationrotationqwidgetqpixmap

解决方案


这是QLabel/QPixmap动画旋转的演示。没有必要使用QPropertyAnimation. QLabel因为or没有旋转属性QPixmap。所以使用QVariantAnimationmake QPixmaprotate 作为动画并使用QPixmap::transformed来旋转它。如果你想很好地控制像素图的动画,强烈推荐QGraphicsPixmapItemQPropertyAnimation

class RotateMe : public QLabel {

    Q_OBJECT
public:
    explicit RotateMe(QWidget* parent = Q_NULLPTR) :
        QLabel(parent),
        pixmap(100, 100),
        animation(new QVariantAnimation )
    {
        resize(200, 200);
        pixmap.fill(Qt::red);

        animation->setDuration(10000);
        animation->setStartValue(0.0f);
        animation->setEndValue(90.0f);
        connect(animation, &QVariantAnimation::valueChanged, [=](const QVariant &value){
            qDebug()<<value;
            QTransform t;
            t.rotate(value.toReal());
            setPixmap(pixmap.transformed(t));
        });
        animation->start();
    }
private:
    QPixmap             pixmap;
    QVariantAnimation  *animation;
};

推荐阅读