2012-10-18 73 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; 
} 

我在主窗口類使用這個類的「g」作爲中心部件。所以它像QGraphicsView一樣工作。

問題是當我按下「繪圖區域」中的中間按鈕時 - 點被創建,但不是在點擊時的位置 - 點被移動。爲什麼?所以當我嘗試通過按下中間按鈕來繪製這些點時 - 所有這些點都被繪製在錯誤的地方(不是在我的光標下,它們被繪製在左側,在光標位置上方)。

我該如何解決這個問題?

回答

4

QGraphicsViewQGraphicsScene具有不同的座標空間。當你調用setPos時,它應該在場景座標中,但是由於你在視圖的鼠標事件中,你的x和y將會處於視圖座標中。

我懷疑你的映射x和y座標現場空間應該解決這個問題:

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

是的,這解決了這個問題。謝謝,你真的很擅長Qt! – ScienceSE