QGraphicsItem setPos() not triggered

QGraphicsItem setPos() not triggered

本文关键字:not triggered setPos QGraphicsItem      更新时间:2023-10-16

再次尝试实现bezier曲线编解码器。有

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,但我想了解那里发生了什么。

提前谢谢。

QGraphicsItem::setPos()不是虚拟的,所以不能覆盖它。这就是为什么永远不会调用BezierNode::setPos()的原因。