我正在用Qt设计一个计时器。使用QGraphicsEllipseItem,我画了一个圆圈,现在我需要每秒围绕这个圆圈(改变颜色)动画QPen。我找到了QGraphicsPathItem,但我需要一些关于如何前进的例子。有人能告诉我一个例子吗?
答案 0 :(得分:1)
你有两个问题:
QGraphicsEllipseItem
不是QObject
,因此QPropertyAnimation
无法直接在此商品上使用QGraphicsItemAnimation
并不涵盖您想制作动画的属性。你能做什么?
IMO的最佳方法是提供一些自定义QObject
,您可以在其上执行此动画。您可以继承QObject
或使用假QGraphicsObject
(QObject
)。
class ShapeItemPenAnimator : public QGraphicsObject {
Q_OBJECT
private:
QAbstractGraphicsShapeItem *mParent;
QPropertyAnimation *mAnimation;
public:
QPROPERTY(QColor penColor
READ penColor
WRITE setPenColor)
explicit ShapeItemPenAnimator(QAbstractGraphicsShapeItem * parent)
: QGraphicsObject(parent)
, mParent(parent) {
setFlags(QGraphicsItem::ItemHasNoContents);
mAnimation = new QPropertyAnimation(this, "penColor", this);
}
QColor penColor() const {
return mParent->pen().color();
}
public slots:
void setPenColor(const QColor &color) {
QPen pen(mParent->pen());
pen.setColor(color);
mParent->setPen(pen);
}
public:
void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0) {
}
QRectF boundingRect() const {
return QRectF();
}
QPropertyAnimation *animation() const {
return mAnimation;
}
}
现在您只需将此对象附加到QGraphicsEllipseItem
并设置所需的动画。
// yourEllipse
ShapeItemPenAnimator *animator = new ShapeItemPenAnimator(yourEllipse);
animator->animation()->setEndValue(....);
animator->animation()->setStartValue(....);
animator->animation()->setDuration(....);
animator->animation()->setEasingCurve(....);
答案 1 :(得分:0)
有几个类帮助Qt中的QGraphicsItem动画。我建议调查QGraphicsItemAnimation和QPropertyAnimation。您可以使用第二个来设置项目颜色的动画。以下是使用QPropertyAnimation的示例: How to make Qt widgets fade in or fade out?