修改先旋转再缩放的跳跃问题
This commit is contained in:
parent
7ba275fe0e
commit
2cd9e236d5
|
|
@ -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; \
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue