我正在编写一个使用 Qt 图形 View 框架的程序。我已将 QGraphicsItem 子类化为包含其他 QGraphicsItem(或其其他子类)的类。该类是所包含的QGraphicsItem
的父类;这个想法是使用复合对象。
来自docs这似乎与我试图实现的目标相冲突:
- 在
mousePressEvent
中调用ignore()
将使我的对象不可移动。我想移动它。 - 在
mousePressEvent
中调用accept()
将阻止事件传播到子对象。一些子对象应该对鼠标事件使用react。
我怎样才能做到这一点?
最佳答案
我认为您对文档的解释不正确。
Calling
ignore()
inmousePressEvent
will make my object unmovable.
我不相信这是真的。对我来说,调用 ignore()
就像对象说“我已经评估了这个事件。我已经采取了我想要的所有行动来响应这个事件。我还决定这不是有意的对我来说,所以我现在将把它传递给我下面的下一个物体”。我找不到任何表明忽略事件将取消设置 QGraphicsItem::ItemIsMovable
标志的内容(这决定了 QGraphicsItem 是否可移动)。
我不明白为什么你不能让你的对象移动和ignore()
事件,但我建议这不是一个明智的方法(在大多数情况下:显然你可能有理由这样做)。
Calling
accept()
inmousePressEvent
will prevent the event from being propagated to the child object.
我相信这是真的,但父级仍然可以修改其子级。我的理解是调用 accept()
就像对象说“我已经评估了这个事件。我已经采取了我想要的所有行动来响应这个事件(其中可能包括修改我的 child )。我已经还决定该事件是为我举办的,因此我不会继续举办该事件”。
关于qt - 如何将 mousePressEvent() 传播到一组 QGraphicsItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533573/