QGraphicsItem setPos() not triggered
QGraphicsItem setPos() not triggered
再次尝试实现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()的原因。
相关文章:
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- Directx 11 - CompileFromFile() is not compiling
- 方法错误"not all control paths return a value"和方法不返回值
- Centos7 g++ "to_string is not in a member of std"
- 将系数存储在头文件的数组中("does not name a type"错误)
- QGraphicsItems not showing up QGraphicsScene
- QComboBox not triggered
- QGraphicsItem setPos() not triggered
- Qt paintevent() not triggered