2014-10-09 146 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