QGraphicsItemGroup 中使用动画的奇怪问题--上

在尝试为QGraphicsItemGroup实现平滑移动效果时,遇到QPropertyAnimation无法动画化pos属性的错误。文章分析了QGraphicsItemGroup与QGraphicsItem、QGraphicsObject的关系,指出QGraphicItemGroup可能不直接支持pos属性动画,建议自定义属性来实现动画效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来打算在Graphics View Framework框架下实现移动一个GraphicsItemGroup(从QObject与QGraphicItemGroup派生) 的时候坐标的变化有一个过渡的效果,而不是直接变化..思路本来很简单,但是不想却出现了意料之外的事情.


原本思路就是重载GraphicsItemGroup 的mouseMoveEvent, 然后在mouseMoveEvent中加入对QGraphicsItemGroup 坐标的一个动态差值.代码如下

void GraphicsItermGroup::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    int x = event->scenePos().x();
    int y = event->scenePos().y();
    
    QPropertyAnimation *pAnimation = new QPropertyAnimation(this, "pos");
    pAnimation->setEasingCurve(QEasingCurve::OutBounce);
    pAnimation->setDuration(250);
    pAnimation->setStartValue(this->pos());
    pAnimation->setEndValue(QPointF(x,y));
    pAnimation->start(QAbstractAnimation::DeleteWhenStopped);
}


但是在移动的时候我所料想的效果没有出现, 取而代之的是在输出栏有如下输出

QPropertyAnimation: you're trying to animate a non-existing property pos of your QObject

似乎是在说pos这个属性不存在....但是查看QGraphicItem的源码的时候发现pos属性被定义在QGraphicObject里面

class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
{
    Q_OBJECT
    ...
    Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL)
    ...

}

而QGraphicItemGroup是从QGraphicItem派生的.而QGraphicItem中并未见有类似pos的属性的声明.

自此个人推断QGraphicItemGroup是没有pos属性的, 要实现pos的动画需要自己声明一个pos属性.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值