qt - 如何将 mousePressEvent() 传播到一组 QGraphicsItem?

标签 qt mouseevent qgraphicsitem

我正在编写一个使用 Qt 图形 View 框架的程序。我已将 QGraphicsItem 子类化为包含其他 QGraphicsItem(或其其他子类)的类。该类是所包含的QGraphicsItem的父类;这个想法是使用复合对象。

来自docs这似乎与我试图实现的目标相冲突:

  • mousePressEvent 中调用 ignore() 将使我的对象不可移动。我想移动它。
  • mousePressEvent 中调用 accept() 将阻止事件传播到子对象。一些子对象应该对鼠标事件使用react。

我怎样才能做到这一点?

最佳答案

我认为您对文档的解释不正确。

Calling ignore() in mousePressEvent will make my object unmovable.

我不相信这是真的。对我来说,调用 ignore() 就像对象说“我已经评估了这个事件。我已经采取了我想要的所有行动来响应这个事件。我还决定这不是有意的对我来说,所以我现在将把它传递给我下面的下一个物体”。我找不到任何表明忽略事件将取消设置 QGraphicsItem::ItemIsMovable 标志的内容(这决定了 QGraphicsItem 是否可移动)。

我不明白为什么你不能让你的对象移动ignore()事件,但我建议这不是一个明智的方法(在大多数情况下:显然你可能有理由这样做)。

Calling accept() in mousePressEvent will prevent the event from being propagated to the child object.

我相信这是真的,但父级仍然可以修改其子级。我的理解是调用 accept() 就像对象说“我已经评估了这个事件。我已经采取了我想要的所有行动来响应这个事件(其中可能包括修改我的 child )。我已经还决定该事件是为我举办的,因此我不会继续举办该事件”。

关于qt - 如何将 mousePressEvent() 传播到一组 QGraphicsItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533573/

相关文章:

c++ - windows下如何设置Qt程序的图标?

javascript - 如何检查鼠标的Y坐标是否大于某个值

python - 如何为 QTextEdit 小部件定义 mousePressEvent 函数而不对其进行子类化?

c++ - 如何使用QGraphicsView的QGraphicsItem类绘制三角形

c++ - QGraphicsLineItem::paint() 工件

使用 QList 时 Qt 崩溃(堆损坏)

带有模板访问器的 Qt Q_PROPERTY

java - Qt for Android JNI : java. lang.NoSuchMethodError

c# - MouseWheel 事件不以 120 为增量滚动

qt - 对 QGraphicsScene 使用 MouseMoveEvent,对 QGraphicsItem 使用 HoverEnterEvent