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);
}
时间: 2024-10-10 04:03:11

Qt QGraphicsItem 绕中心旋转、放缩的相关文章

Android-两个小球不停的绕中心旋转的进度条

转载请标明出处: http://blog.csdn.net/hanhailong726188/article/details/47363911 本文出自:海龙的博客 一.概述 最近做了一个比较清新的进度条,没啥难度的,就是涉及到属性动画和canvas绘制圆形的知识,因为群里有一个问怎么实现的,这里就稍微写了一下原理,先看效果图 二.效果图 Gif录制的帧数有点低,导致稍微有点卡,但是在真实运行的时候一点都不卡 三.实现原理 自定义view 自定义属性动画 canvas画圆 四.代码实现 因为代码

IOS版本-两个小球不停的绕中心旋转的进度条

转载请标明出处: http://blog.csdn.net/hanhailong726188/article/details/47375157 本文出自:海龙的博客 一.概述 昨天实现了一个Android版本的小清新动画,可以当成进度条来用,这里补上IOS版本的 二.效果图 三.实现原理 自定义UIView,然后添加两个CALayer,通过CAShapeLayer和UIBezierPath画出两个小圆球,动起来是通过CAAnimation动画,动画包括小球的位移动画.缩放动画.透明动画组合起来的

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

我之前用canvas写了个头像剪切的demo,但是关于让载入的图片旋转是个问题,虽然通过其它方法实现了,但是感觉并不太好,于是查了些资料,想试着重新做一下canvas的旋转. 在开始之前,先让我们来做一些准备工作: 1 (function () { 2 // 设置画布的宽高 3 var width = 300, 4 heigh = 100, 5 cache = {}; // 存储canvas上下文 6 7 // 获取绘图上下文 8 function getCtx(name, w, h) { 9

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

matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); 经常在中心旋转的应用中看到这段代码. preTranslate是指在matrix旋转之前平移,postTranslate是指在matrix旋转之后平移 注意他们参数是平移的距离,而不是平移目的地的坐标! 由于旋转是以原点(0,0)为中心的,所以为了把界面的中心移至(0,0)对齐,就要preTranslate(-centerX, -cen

canvas绘制柱状图和、绘制形状中心旋转

<!DOCTYPE html> <html ng-app=""> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id="cvs" width="400" height="300"

android animation应用——图片绕固定点旋转

一.功能:实现将图片绕固定点旋转,圈数随机,onTouch后旋转. 二.程序框架: 组成 功能 主Activity:MyActivity 1.实现animation 2.实现onTouch View       :MyView 1.将突破绘制到MyView上 三.程序源代码: MyVIew.java package com.androids.kavinapps.myapplication; import android.content.Context; import android.graphi

如何用几何画板画绕点旋转动画

作为21世纪的动态几何工具,几何画板完美地实现了动态教学,可以用它给学生们演示图形的运动过程和状态,比如可以实现某平面图形围绕一个点做旋转动画,那么具体要怎么做呢? 以制作"三角形绕平面上任意一点旋转的动画"为例,具体的操作步骤如下: 步骤一 打开教学课件制作软件几何画板,使用左侧"线段工具"绘制任意三角形ABC,然后使用"点工具"在三角形外绘制任意一点O,双击点O,标记为旋转中心: 步骤二 点击上方的"数据"菜单,在下拉菜单

PyQt实现图片中心旋转

# -*- coding: cp936 -*- from PyQt4 import QtCore, QtGui, Qt class RotatePage(QtGui.QFrame): def __init__(self, img, x_pos, y_pos, direction = 1, speed = 30, step = 10): super(RotatePage, self).__init__() self.img = img  #图片 self.x_pos = x_pos  #x坐标 s

HDU 4998 Rotate(计算几何 绕点旋转)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4998 Problem Description Noting is more interesting than rotation! Your little sister likes to rotate things. To put it easier to analyze, your sister makes n rotations. In the i-th time, she makes every