QGraphicItem实现中心旋转

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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值