首页 > 代码库 > Qt QGraphicsItem 绕中心旋转、放缩
Qt QGraphicsItem 绕中心旋转、放缩
最近用到了QGraphicsItem,可以通过QGraphicsItemAnimation使其产生动画效果。
QGraphicsItemAnimation自带了setPosAt()、setRotationAt()、setScaleAt()等方法可以用来移动、旋转、放缩QGraphicsItem,但其默认的OriginPoint是这个Item的左上角,虽然QGraphicsItem自带了setTransformOriginPoint()方法,但是设置以后没有效果,还是绕左上角放缩旋转,只好采取其他办法。从网上查了一番资料,最后用了下面这种矩阵变换的方法。
先设置QTimeLine:
QTimeLine _timeLine; _timeLine.setDuration(3000); //持续时间 _timeLine.setLoopCount(0); //无限循环 _timeLine.setFrameRange(0, 100);//frameChanged()发出的值在0-100之间 _timeLine.setCurveShape(QTimeLine::SineCurve); //frameChanged()发出的值像sin曲线一样,1,2,...,99,100,99,...,2,1 _timeLine.setUpdateInterval(25); //更新频率(也就是frameChanged(int)的执行速度),每25ms更新一次,相当于每秒40帧, connect(&_timeLine, SIGNAL(frameChanged(int)), this, SLOT(scaleAnimation(int)));
_timeLine.start();
槽函数如下:
//头文件中的private slots: void scaleAnimation(int frame); //源文件中的void GraphicsItemAnimation::scaleAnimation(int frame){ //_st是一个QGraphicsItem QRectF rect = _st->boundingRect(); QPointF pt = _st->boundingRect().center(); qreal scaleX_Y = (frame+50) / 100.0; QTransform tran; tran.translate(pt.x(), pt.y()); tran.scale(scaleX_Y, scaleX_Y); _st->setTransform(tran); QTransform t; t.translate(-pt.x(), -pt.y()); _st->setTransform(t, true);}
Qt QGraphicsItem 绕中心旋转、放缩
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。