QPropertyAnimation for rotating QWidget



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

我在QLabel中有一个QPixmap。 我想要的是用连续旋转 90 度来制作动画。

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

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

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;
};

您可以通过两种方式实现轮换:

1(创建一个静态图像的集合,每个静态图像代表旋转一定角度的原始像素图。使用计时器,您可以使用集合中的计时器更改标签的像素图。这将模仿动画旋转。

2(使用单个像素图并覆盖标签的QLabel::painEvent(),每次重绘标签时都应使用QPainter::rotate()功能旋转QPainter对象。

相关内容

  • 没有找到相关文章

最新更新