再次尝试实现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,但我想知道,那里发生了什么。
提前致谢。