내 그래픽 장면에서 QGraphicsItemGroup
으로 이동 작업을 실행 취소/다시 실행하는 중입니다. 그것은 포인트 엔티티에 적합합니다.Qt 항목 이동을위한 실행 취소/다시 실행
이동에 대한 나의 명령은 다음과 같습니다
내 명령으로 실행 취소 스택에 밀어class CommandMove : public QUndoCommand
{
public:
CommandMove(QGraphicsItemGroup *group, qreal fromX, qreal fromY,
qreal toX, qreal toY)
{
itemGroup = group;
mFrom = QPointF(fromX, fromY);
mTo = QPointF(toX, toY);
setText(QString("Point move (%1,%2) -> (%3,%4)").arg(fromX).arg(fromY)
.arg(toX).arg(toY));
}
virtual void undo()
{
itemGroup->setPos(mFrom);
}
virtual void redo()
{
itemGroup->setPos(mTo);
}
private:
QGraphicsItemGroup *itemGroup;
QPointF mFrom;
QPointF mTo;
};
:
typedef QPair<QGraphicsItemGroup *, QPointF> item;
Implemenatation :
if (item.first->scenePos() != item.second)
{
mUndoStack->push(new CommandMove(item.first, item.second.x(),
item.second.y(), item.first->x(),
item.first->y()));
}
item
가 QPair
과 같이 정의입니다 선, 원 등과 같은 엔티티의 경우 포인트. 예 : 라인의 시작점과 끝점. 엔티티 이동 명령을 어떻게 정의합니까?
편집
이 라인에 대한 내 구현 : 여기에 event
if (m1)
{
start_p = event->scenePos();
m1 = false;
m2 = true;
}
else if (!m1 && m2)
{
end_p = event->scenePos();
m3 = true;
m2 = false;
}
if (m3)
{
lineItem = new Line(start_p, end_p);
}
이 mousePressEvent
입니다.
어디에서 setPos
을 사용하여 선의 위치를 설정합니까?
아니요, 더 이상 정보가 필요하지 않습니다. 항목의 위치를 설정하면 원래 위치가 새 항목으로 변환됩니다. (전체 항목이 번역되었습니다) – mhcuervo
나는 이것을 위해했다. 나는 라인에 대한 구현을하고 싶다. 한 줄의 끝점을 제공하면 충분합니까? –
'mFrom' 포인트를 아이템의'pos()'로하고, 그 위치를'mTo'로 설정하십시오. 그것은 그래픽 항목을위한 구현 일 것입니다. – mhcuervo