2014-10-09 147 views
0

再次嘗試實現bezier曲線的重做器。有QGraphicsItem setPos()未觸發

class BezierNode : public QGraphicsItem 

BezierNode::BezierNode(QPointF point, Type type) : QGraphicsItem() 
{ 
    setPos(point); 
    setFlags(ItemIsMovable | ItemSendsScenePositionChanges | ItemSendsGeometryChanges); 
} 

它正確地繞着場景上mousePress +的mouseMove,我能趕上在itemChange()事件與控制點一些額外的演技。在QGraphicsItem::mouseMoveEvent()(根據Qt來源gitorious)有一個電話item->setPos(...)。但是,如果我嘗試重新實現BezierNode::setPos(..),它從未觸發移動對象。

void BezierNode::setPos(const QPointF &pos) { 
    qDebug() << "setPos " << pos; 
    m_point = pos; 
    QGraphicsItem::setPos(pos); 
} 

在我的情況setPos()觸發僅在構造函數(還有我手動調用它)。是的,它正確地在場景中移動,我可以通過pos()獲得它的位置,並在任何地方使用它而不是m_point,但是我想了解,那裏會發生什麼。

在此先感謝。

回答

3

QGraphicsItem::setPos()不是虛擬的,所以你不能覆蓋它。這就是爲什麼BezierNode :: setPos()永遠不會被調用。

+0

所以我應該把所有的鉤子放在'itemChange()'中? – ProdoElmit 2014-10-09 14:11:05

+1

我不確定你實際上想要做什麼 - 爲什麼不能使用pos()函數的返回值而不是擁有自己的'm_point'成員? – Mitch 2014-10-09 14:28:49