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,但是我想了解,那里会发生什么。
在此先感谢。
所以我应该把所有的钩子放在'itemChange()'中? – ProdoElmit 2014-10-09 14:11:05
我不确定你实际上想要做什么 - 为什么不能使用pos()函数的返回值而不是拥有自己的'm_point'成员? – Mitch 2014-10-09 14:28:49