QGraphicItem实现中心旋转

QGraphicItem实现中心旋转

 

c++

c++

Tianyu-liu

¥19.90

订阅博主

QGraphicItem实现中心旋转
一、   解决思路
1)   确定旋转中心坐标:centerPos;
2)   在mousePressEvent(QMouseEvent *e)中e->pos()获得按下时的坐标:pressPos
3)   mouseMoveEvent(QMouseEvent *e)中e->pos()获得当前坐标:movePos;
4)   centerPos、pressPos、movePos三点确定旋转角度:rotateAngle;
5)   QTransform transform; 
transform.rotate(rotateAngle, Qt::ZAix); //沿着Z轴旋转角度rotateAngle
this->setTransform(transform);
6)   Done。

二、 示意图

 
获取旋转中心:
QPointF centerPos=Item->boundingRect().center();
设置旋转中心:
void QGraphicsItem::setTransformOriginPoint(qreal x, qreal y)
设置旋转角度:
void QGraphicsItem::setRotation(qreal angle)
三、   难点
1.   角度确定

采用余弦定理:

 
2.   判断是顺时针还是逆时针
思路:在平面上作向量OA、OB,OA叉乘OB为正,则是逆时针,为负为顺时针.
过程:
记向量OA为(dx1, dy1) = (x2-x1, y2-y1)向量OB为(dx2, dy2) = (x3-x1, y3-y1)叉积为:
即:
dx1 * dy2 - dy1 * dx2 
3.   鼠标根据在Item的位置进行形状的改变
思路:通过判断鼠标在Item的位置进行形状的替换,可设置四种形状:
RotationLeftUp,RotationLeftDown,RotationRightUp,RotationRightDown.旋转的鼠标样式可以自定义。
QCursor *myCursor= newe QCursor(QPixmap(":/image/rotation.png"));

setCursor(*myCursor);

 

 

http://blog.csdn.net/u013207966/article/details/51892289

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的GUI框架,其中有一个重要的类叫做QGraphicsItem,它是用来表示图形场景中的元素的。当我们想要在图形场景中实现一些特定的功能时,可能需要重写QGraphicsItem类的一些方法。本题中要求重写QGraphicsItem实现拖动、缩放、旋转和斜切功能。 首先,我们需要定义一个Rectangle类,继承QGraphicsItem类。在类中重写boundingRect()和paint()方法,用来定义矩形的边界和绘制矩形的方法。接下来,我们需要重写mouseMoveEvent()和mousePressEvent()方法,以实现矩形的拖动功能。在鼠标按下时记录下当前鼠标位置和矩形位置的偏移量,当鼠标在移动时,根据偏移量来设置矩形的新位置即可。 缩放功能可以通过重写wheelEvent()方法来实现。当鼠标滚轮滚动时,计算出缩放因子,然后改变矩形的大小即可。 为了实现旋转和斜切功能,我们需要先将矩形的中心点移到原点,然后进行旋转和斜切操作,最后再将中心点移回到原来的位置。旋转可以通过QTransform类中的QTransform::rotate()方法实现,斜切可以通过QTransform类中的QTransform::shear()方法实现。 最终,我们在Rectangle类中重写的方法应该包括boundingRect()、paint()、mouseMoveEvent()、mousePressEvent()、wheelEvent()和绕中心旋转和斜切的方法。通过这些方法的实现,我们就可以在图形场景中拖动、缩放、旋转和斜切矩形了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值