我是Qt的新手,我在QWidget
旋转时遇到了一些问题。
我在QLabel中有一个QPixmap。 我想要的是用连续旋转 90 度来制作动画。
我知道QPropertyAnimation
,我知道如何使用它,但我正在努力 如何使用它来旋转QWidget
.有没有简单的方法可以使用实现我的目标并使用动画旋转整个QLabel
或其中的QPixmap
? 谢谢。
这是使用动画旋转QLabel/QPixmap
的演示。 没有必要使用QPropertyAnimation
.因为没有QLabel
或QPixmap
的旋转属性。所以用来QVariantAnimation
QPixmap
旋转为动画,并使用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
对象。