QGraphicsItem setPos()未触发

时间:2014-10-09 13:11:04

标签: c++ qt qgraphicsitem

再次尝试实现bezier曲线redactor。有

class BezierNode : public QGraphicsItem

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

它在mousePress + mouseMove中正确地在场景中移动,我可以在itemChange()中捕捉事件以获得一些额外的控制点。在QGraphicsItem::mouseMoveEvent()(根据gitorious的Qt来源),有item->setPos(...)的电话。但是,如果我尝试重新实现BezierNode::setPos(..),它永远不会在移动对象上触发。

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

在我的情况下setPos()仅在构造函数中触发(我手动调用它)。是的,它在场景中正确移动,我可以用pos()获得它的位置并在任何地方使用它而不是m_point,但我想知道,那里发生了什么。

提前致谢。

1 个答案:

答案 0 :(得分:3)

QGraphicsItem::setPos()不是虚拟的,因此您无法覆盖它。这就是BezierNode :: setPos()永远不会被调用的原因。