2012-10-18 3 views
1

문제가 있습니다.QGraphicsView에서 그리기 할 때 그림 이동

QGraphicsView를 상속받은 클래스가 있는데, 이것을 "g"라고 가정 해 봅시다. 내가 mousePressEvent 방법을 다시 구현, 메소드의 코드는 다음과 같습니다

void GraphWidget::mousePressEvent(QMouseEvent *event) 
{ 
    if(event->button() == Qt::MiddleButton) 
     createNode(event->pos().x(), event->pos().y()); 

    update(); 
    QGraphicsView::mousePressEvent(event); 
} 

createNode 방법의 코드는 다음과 같습니다

Node *GraphWidget::createNode(qreal x, qreal y, int id) 
{ 
    Node* node = new Node(this); 
    scene()->addItem(node); 
    node->setPos(x, y); 
    return node; 
} 

나는 나의 MainWindow를 클래스에 중앙 위젯이 클래스 "g"를 사용합니다. QGraphicsView와 같이 작동합니다.

"그리기 영역"에서 가운데 ​​단추를 누르면 문제가 발생합니다. 즉, 클릭 할 때 점이 생성되지만 점이 아닌 점이 이동됩니다. 왜? 따라서 중간 점을 눌러 점을 그리려고 할 때 - 모든 점이 잘못된 위치에 그려집니다 (내 커서가 아닌, 커서 위치 왼쪽과 위로 그려 짐).

어떻게 해결할 수 있습니까?

답변

4

QGraphicsViewQGraphicsScene의 좌표 공간이 다릅니다. setPos을 호출하면 장면 좌표계에 있어야하지만보기의 마우스 이벤트에서 x 및 y가 뷰 좌표가됩니다.

node->setPos(mapToScene(QPoint(x, y)); 
+0

그래, 그것은 문제가 해결 될 :

나는 당신의 x와 y를 매핑하는 문제를 해결해야하는 장면 공간 좌표 용의자. 고마워, 너 정말 Qt가 좋다! – ScienceSE