修改先旋转再缩放的跳跃问题

This commit is contained in:
duanshengchao 2024-08-28 16:38:26 +08:00
parent 7ba275fe0e
commit 2cd9e236d5
4 changed files with 16 additions and 12 deletions

View File

@ -19,8 +19,8 @@ DesignerView::~DesignerView()
void DesignerView::initialize()
{
//去掉QGraphicsView自带滚动条
//setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//设置背景
setStyleSheet("background-image: url(:/images/checkerboard.png);\
padding: 0px; \

View File

@ -50,8 +50,10 @@ void GraphicPolygonItem::updateCoordinate() //当执行了resie和editShape函
{
prepareGeometryChange();
//更改图形绘制节点坐标,让图形中心和原点对齐
QPolygonF ptsOnScene = mapToScene(m_points); //所有操作都在scene坐标系下进行然后在还原至item坐标系否则会有跳转
for(int i=0; i<m_points.count(); i++)
m_points[i] += delta;
ptsOnScene[i] += delta; //一定要在scene坐标系下执行操作不能直接m_points += delta;因为缩放以后item自身的内部坐标系也会同步缩放单位刻度和scene下的单位刻度不再一致所以所有相关计算一定要在同一个坐标系下完成
m_points = mapFromScene(ptsOnScene);
m_boundingRect = m_points.boundingRect();
//移动整体图形,消除节点坐标更后的绘制跳转
moveBy(-delta.x(), -delta.y());
@ -66,10 +68,6 @@ void GraphicPolygonItem::paint(QPainter* painter, const QStyleOptionGraphicsItem
painter->setPen(m_pen);
painter->setBrush(m_brush);
painter->drawPolygon(m_points);
//绘制变换原点
QPointF originPoint = transformOriginPoint();
painter->setBrush(Qt::red);
painter->drawEllipse(originPoint, 4, 4);
if (option->state & QStyle::State_Selected) //是选中状态,绘制选中框
{
@ -77,6 +75,11 @@ void GraphicPolygonItem::paint(QPainter* painter, const QStyleOptionGraphicsItem
painter->setPen(QPen(QColor(70,70,70), nPenWidth, Qt::DashLine)); //蓝色的外框
painter->setBrush(Qt::NoBrush);
painter->drawRect(m_boundingRect_selected);
//绘制变换原点
QPointF originPoint = transformOriginPoint();
painter->setBrush(Qt::red);
painter->drawEllipse(originPoint, 4, 4);
}
}

View File

@ -104,10 +104,6 @@ void GraphicsRectItem::paint(QPainter* painter, const QStyleOptionGraphicsItem*
else
painter->drawRect(m_boundingRect);
//绘制变换原点
QPointF originPoint = transformOriginPoint();
painter->setBrush(Qt::red);
painter->drawEllipse(originPoint, 4, 4);
if (option->state & QStyle::State_Selected) //是选中状态,绘制选中框
{
@ -115,6 +111,11 @@ void GraphicsRectItem::paint(QPainter* painter, const QStyleOptionGraphicsItem*
painter->setPen(QPen(QColor(70,70,70), nPenWidth, Qt::DashLine)); //蓝色的外框
painter->setBrush(Qt::NoBrush);
painter->drawRect(m_boundingRect_selected);
//绘制变换原点
QPointF originPoint = transformOriginPoint();
painter->setBrush(Qt::red);
painter->drawEllipse(originPoint, 4, 4);
}
}

View File

@ -66,7 +66,7 @@ void CMainWindow::initializeDockUi()
// Set central widget
m_pDrawingPanel = new DrawingPanel();
DesignerScene* designerScene = m_pDrawingPanel->getDesignerScene();
connect(designerScene, SIGNAL((QGraphicsItem*)), this, SLOT(onSignal_addItem(QGraphicsItem*)));
connect(designerScene, SIGNAL(signalAddItem(QGraphicsItem*)), this, SLOT(onSignal_addItem(QGraphicsItem*)));
CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget");
CentralDockWidget->setWidget(m_pDrawingPanel);
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);