修改先旋转再缩放的跳跃问题
This commit is contained in:
parent
7ba275fe0e
commit
2cd9e236d5
|
|
@ -19,8 +19,8 @@ DesignerView::~DesignerView()
|
||||||
void DesignerView::initialize()
|
void DesignerView::initialize()
|
||||||
{
|
{
|
||||||
//去掉QGraphicsView自带滚动条
|
//去掉QGraphicsView自带滚动条
|
||||||
//setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
//setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
//设置背景
|
//设置背景
|
||||||
setStyleSheet("background-image: url(:/images/checkerboard.png);\
|
setStyleSheet("background-image: url(:/images/checkerboard.png);\
|
||||||
padding: 0px; \
|
padding: 0px; \
|
||||||
|
|
|
||||||
|
|
@ -50,8 +50,10 @@ void GraphicPolygonItem::updateCoordinate() //当执行了resie和editShape函
|
||||||
{
|
{
|
||||||
prepareGeometryChange();
|
prepareGeometryChange();
|
||||||
//更改图形绘制节点坐标,让图形中心和原点对齐
|
//更改图形绘制节点坐标,让图形中心和原点对齐
|
||||||
|
QPolygonF ptsOnScene = mapToScene(m_points); //所有操作都在scene坐标系下进行,然后在还原至item坐标系,否则会有跳转
|
||||||
for(int i=0; i<m_points.count(); i++)
|
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();
|
m_boundingRect = m_points.boundingRect();
|
||||||
//移动整体图形,消除节点坐标更后的绘制跳转
|
//移动整体图形,消除节点坐标更后的绘制跳转
|
||||||
moveBy(-delta.x(), -delta.y());
|
moveBy(-delta.x(), -delta.y());
|
||||||
|
|
@ -66,10 +68,6 @@ void GraphicPolygonItem::paint(QPainter* painter, const QStyleOptionGraphicsItem
|
||||||
painter->setPen(m_pen);
|
painter->setPen(m_pen);
|
||||||
painter->setBrush(m_brush);
|
painter->setBrush(m_brush);
|
||||||
painter->drawPolygon(m_points);
|
painter->drawPolygon(m_points);
|
||||||
//绘制变换原点
|
|
||||||
QPointF originPoint = transformOriginPoint();
|
|
||||||
painter->setBrush(Qt::red);
|
|
||||||
painter->drawEllipse(originPoint, 4, 4);
|
|
||||||
|
|
||||||
if (option->state & QStyle::State_Selected) //是选中状态,绘制选中框
|
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->setPen(QPen(QColor(70,70,70), nPenWidth, Qt::DashLine)); //蓝色的外框
|
||||||
painter->setBrush(Qt::NoBrush);
|
painter->setBrush(Qt::NoBrush);
|
||||||
painter->drawRect(m_boundingRect_selected);
|
painter->drawRect(m_boundingRect_selected);
|
||||||
|
|
||||||
|
//绘制变换原点
|
||||||
|
QPointF originPoint = transformOriginPoint();
|
||||||
|
painter->setBrush(Qt::red);
|
||||||
|
painter->drawEllipse(originPoint, 4, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,10 +104,6 @@ void GraphicsRectItem::paint(QPainter* painter, const QStyleOptionGraphicsItem*
|
||||||
else
|
else
|
||||||
painter->drawRect(m_boundingRect);
|
painter->drawRect(m_boundingRect);
|
||||||
|
|
||||||
//绘制变换原点
|
|
||||||
QPointF originPoint = transformOriginPoint();
|
|
||||||
painter->setBrush(Qt::red);
|
|
||||||
painter->drawEllipse(originPoint, 4, 4);
|
|
||||||
|
|
||||||
if (option->state & QStyle::State_Selected) //是选中状态,绘制选中框
|
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->setPen(QPen(QColor(70,70,70), nPenWidth, Qt::DashLine)); //蓝色的外框
|
||||||
painter->setBrush(Qt::NoBrush);
|
painter->setBrush(Qt::NoBrush);
|
||||||
painter->drawRect(m_boundingRect_selected);
|
painter->drawRect(m_boundingRect_selected);
|
||||||
|
|
||||||
|
//绘制变换原点
|
||||||
|
QPointF originPoint = transformOriginPoint();
|
||||||
|
painter->setBrush(Qt::red);
|
||||||
|
painter->drawEllipse(originPoint, 4, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ void CMainWindow::initializeDockUi()
|
||||||
// Set central widget
|
// Set central widget
|
||||||
m_pDrawingPanel = new DrawingPanel();
|
m_pDrawingPanel = new DrawingPanel();
|
||||||
DesignerScene* designerScene = m_pDrawingPanel->getDesignerScene();
|
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");
|
CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget");
|
||||||
CentralDockWidget->setWidget(m_pDrawingPanel);
|
CentralDockWidget->setWidget(m_pDrawingPanel);
|
||||||
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
|
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue