实现handle的光标样式随旋转角度做调整适配
This commit is contained in:
parent
2cd9e236d5
commit
7f4c48d66f
|
|
@ -55,6 +55,8 @@ void BaseSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScen
|
|||
double dLengthY = ms_ptMouseLast.y() - originPoint.y();
|
||||
double dLengthX = ms_ptMouseLast.x() - originPoint.x();
|
||||
ms_dAngleMouseDownToItem = atan2(dLengthY, dLengthX) * 180 / M_PI;
|
||||
// if(atan2(dLengthY, dLengthX) < 0)
|
||||
// ms_dAngleMouseDownToItem += 360.0;
|
||||
//创建副本
|
||||
item->createOperationCopy();
|
||||
emit setWorkingSelector(ST_rotation);
|
||||
|
|
@ -118,34 +120,115 @@ void BaseSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene
|
|||
setCursor(scene, Qt::ArrowCursor);
|
||||
m_bHoverOnHandel = false;
|
||||
}
|
||||
else if(nHandle >= H_edit)
|
||||
{
|
||||
setCursor(scene, Qt::OpenHandCursor);
|
||||
m_bHoverOnHandel = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//划分为四组区间范围,分别水平组、垂直组、一三象限倾斜组、二四象限倾斜组,每组由两个对称区间构成
|
||||
double dRotation = item->rotation();
|
||||
double dTileAngle = 15.0;
|
||||
|
||||
switch (nHandle)
|
||||
{
|
||||
case H_leftTop:
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
{
|
||||
if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
else //水平区间
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
break;
|
||||
}
|
||||
case H_top:
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
{
|
||||
if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
else
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
break;
|
||||
}
|
||||
case H_rightTop:
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
{
|
||||
if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
else
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
break;
|
||||
}
|
||||
case H_right:
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
{
|
||||
if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
else
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
break;
|
||||
}
|
||||
case H_rightBottom:
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
{
|
||||
if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
else //水平区间
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
break;
|
||||
}
|
||||
case H_bottom:
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
{
|
||||
if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
else
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
break;
|
||||
}
|
||||
case H_leftBottom:
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
{
|
||||
if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
else //水平区间
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
break;
|
||||
}
|
||||
case H_left:
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
{
|
||||
if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间
|
||||
setCursor(scene, Qt::SizeVerCursor);
|
||||
else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜
|
||||
setCursor(scene, Qt::SizeBDiagCursor);
|
||||
else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜
|
||||
setCursor(scene, Qt::SizeFDiagCursor);
|
||||
else
|
||||
setCursor(scene, Qt::SizeHorCursor);
|
||||
break;
|
||||
}
|
||||
case H_rotate_leftTop:
|
||||
{
|
||||
int nSize = 24;
|
||||
|
|
|
|||
|
|
@ -32,14 +32,18 @@ void RotationSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerS
|
|||
double dLengthY = ms_ptMouseLast.y() - originPoint.y();
|
||||
double dLengthX = ms_ptMouseLast.x() - originPoint.x();
|
||||
double dAngleMouseToItem = atan2(dLengthY, dLengthX) * 180 / M_PI;
|
||||
// if(atan2(dLengthY, dLengthX) < 0)
|
||||
// dAngleMouseToItem += 360.0;
|
||||
|
||||
double rotationAngle = item->rotation() + (dAngleMouseToItem - ms_dAngleMouseDownToItem);
|
||||
if (rotationAngle > 360)
|
||||
//让角度保持在正负180的区间,也就是上下两个半圈,这样易于象限判断
|
||||
if (rotationAngle > 180)
|
||||
rotationAngle -= 360;
|
||||
if (rotationAngle < -360)
|
||||
if (rotationAngle < -180)
|
||||
rotationAngle += 360;
|
||||
|
||||
item->rotateOperationCopy(rotationAngle);
|
||||
//qDebug() << " rotationAngle:" << rotationAngle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -51,7 +55,10 @@ void RotationSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, Design
|
|||
{
|
||||
GraphicsBaseItem* item = qgraphicsitem_cast<GraphicsBaseItem*>(items.at(n));
|
||||
if(item)
|
||||
{
|
||||
item->removeOperationCopy();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ms_nDragHandle = H_none;
|
||||
|
|
|
|||
Loading…
Reference in New Issue