最近用到了QGraphicsItem,可以通过QGraphicsItemAnimation使其产生动画效果。

QGraphicsItemAnimation自带了setPosAt()、setRotationAt()、setScaleAt()等方法可以用来移动、旋转、放缩QGraphicsItem,但其默认的OriginPoint是这个Item的左上角,虽然QGraphicsItem自带了setTransformOriginPoint()方法,但是设置以后没有效果,还是绕左上角放缩旋转,只好采取其他办法。从网上查了一番资料,最后用了下面这种矩阵变换的方法。

先设置QTimeLine:

    QTimeLine _timeLine;
_timeLine.setDuration(); //持续时间
_timeLine.setLoopCount(); //无限循环
_timeLine.setFrameRange(, );//frameChanged()发出的值在0-100之间
_timeLine.setCurveShape(QTimeLine::SineCurve); //frameChanged()发出的值像sin曲线一样,1,2,...,99,100,99,...,2,1
_timeLine.setUpdateInterval(); //更新频率(也就是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+) / 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 绕中心旋转、放缩的更多相关文章

  1. 实现Canvas2D绘图 使元素绕中心居中旋转

    我之前用canvas写了个头像剪切的demo,但是关于让载入的图片旋转是个问题,虽然通过其它方法实现了,但是感觉并不太好,于是查了些资料,想试着重新做一下canvas的旋转. 在开始之前,先让我们来做 ...

  2. C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字

    这篇文章是 GDI+ 总结系列的第三篇,如果对 GDI+ 的基础使用不熟悉的朋友可以先看第一篇文章<C# 使用 GDI+ 画图>. 需求 需求是要实现给图片添加任意角度旋转的文字,文字的旋 ...

  3. View以自身中心旋转的代码解惑

    matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); 经常在中心旋转的应用中看到这段代码. ...

  4. No.5 - 纯 CSS 制作绕中轴旋转的立方体

    body{ background-color: #000; margin:; padding:; } main{ perspective: 800px; } .cube{ transform-styl ...

  5. Canvas 图片绕边旋转的小动画

    /** * 图片绕边旋转的小动画 */ function initDemo10() { var canvas = document.getElementById("demo10") ...

  6. [golang]svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量

    1 前言 svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量 2 代码 type Point struct { X float64 Y float64 } func GetOffsetX ...

  7. [golang]图片按中心旋转后,新图的左顶点位置的偏移量

    1 前言 图片按中心旋转后,新图的左顶点位置的偏移量 2 代码 func OffsetXYAfterRotationCore(W, H, L, T, Angle float64) (x, y floa ...

  8. PyQt实现图片中心旋转

    # -*- coding: cp936 -*- from PyQt4 import QtCore, QtGui, Qt class RotatePage(QtGui.QFrame): def __in ...

  9. 项目实战:Qt手机模拟器拉伸旋转框架

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

随机推荐

  1. 20155229《网络对抗技术》Exp:网络欺诈防范

    实验内容 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站. 实验步骤 简单应用SET工具建立冒名网 ...

  2. 汇编 ADD指令

    知识点: 加法汇编指令ADD 一.加法指令 ADD(Addition) 格式 格式: ADD A,B //A=A+B; 功能: 两数相加 . OPRD1为任一通用寄存器或存储器操作数,可以是任意一个 ...

  3. flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作

    flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...

  4. effective c++ 笔记 (26-29)

    //---------------------------15/04/09---------------------------- //#26   尽可能延后变量定义式的出现时间 { /*  1:只要 ...

  5. Js_数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...

  6. 阿里云rds 备份和还原

    阿里云rds 备份和还原 转发:https://www.cnblogs.com/lin1/p/8617764.html 转发:https://help.aliyun.com/knowledge_det ...

  7. linux AB web 性能测试工具

    ab(选项)(参数) 选项 -A:指定连接服务器的基本的认证凭据: -c:指定一次向服务器发出请求数: -C:添加cookie: -g:将测试结果输出为“gnuolot”文件: -h:显示帮助信息: ...

  8. 能帮我们学习吉他的音乐软件——Guitar Pro

    Guitar Pro是一款十分好用的吉他软件,也是目前广大音乐爱好者最喜欢的多音轨的音谱编辑软件.支持MIDI.MusicXML.PTB.GTP等多种格式文件的导入/导出. Guitar Pro 7. ...

  9. 2-Twelfth Scrum Meeting20151212

    任务安排 成员 今日完成 明日任务 闫昊 获取视频播放的进度  获取视频播放进度 唐彬 解决handler可能引起的内存泄露问题  阅读IOS代码+阅读上届网络核心代码 史烨轩 下载service开发 ...

  10. Linux内核分析——第二周学习笔记20135308

    第二周 操作系统是如何工作的 第一节 函数调用堆栈 存储程序计算机:是所有计算机基础的框架 堆栈:计算机中基础的部分,在计算机只有机器语言.汇编语言时,就有了堆栈.堆栈机制是高级语言可以运行的基础. ...