【问题标题】:Moveable QGraphicsItem parent but not child QGraphicsItem可移动 QGraphicsItem 父但不是子 QGraphicsItem
【发布时间】:2014-02-20 12:31:32
【问题描述】:

当通过 QT 和 Pyside 创建 QGraphicsItem 时,您可以使用 childItem.setParentItem(parentItem) 设置它的父级。如果在父级上设置了ItemIsMoveable 标志,则拖动父级将翻译父级及其所有子级。

在我的用例中,我希望能够在从父级内部的任何位置拖动时拖动父级和子级,但不能在子级内部拖动。单击并拖动子项时,我希望有不同的操作。例如,如果制作节点图编辑器,可以拖动节点及其连接点,但从连接点向外拖动时,会创建图形边缘。

这可以使用内置的 QT 标志来完成,还是需要为父项重载鼠标移动事件?我最初走的是超载路线,但觉得我可能正在与已经内置的东西作斗争。

【问题讨论】:

  • 我想我可能搜索得不够好。 This question 几乎相同。我将尝试实施,如果看起来不错,我会回答这个问题,或者根据我的发现将其关闭。我不介意讨论最“QT”的做法,但这可能是重复的。
  • 只为孩子提供mousePressEvent 的空实现(可能还有其他鼠标事件)。然后孩子将窃取他范围内的所有鼠标事件。

标签: qt pyside


【解决方案1】:

Marek R 的答案是我找到的最干净的答案。只需在 child 中实现 mousePressEvent 即可防止其导致 parent 的可移动行为:

class Child(QtGui.QGraphicsItem):
  def __init__(self, name):
    super(Child, self).__init__()

  def mousePressEvent(self, event):
    pass

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多