【发布时间】:2014-10-09 21:42:39
【问题描述】:
再次尝试实现贝塞尔曲线编辑器。有
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,但我想了解那里发生了什么。
提前致谢。
【问题讨论】:
标签: c++ qt qgraphicsitem