【问题标题】:Items hover-event doesn't work when mouse is dragging other item鼠标拖动其他项目时,项目悬停事件不起作用
【发布时间】:2014-01-26 22:35:32
【问题描述】:

我有一个 QGraphicsView,其中包含从 QGraphicsItem 子类化的两种项目。第一种物品(A)是可移动的。第二种 (B) 在鼠标指针下方时应始终突出显示。

如果 B 在 A 下面,B 仍然可以突出显示。但是,如果在拖动 A 时鼠标指针在 B 上,则 B 不会突出显示。

启用此行为的最简洁方法是什么?

编辑

这就是我为 B 实现突出显示的方式:

def hoverEnterEvent(self, *args, **kwargs):
    self.hover = True
    self.update()

def hoverLeaveEvent(self, *args, **kwargs):
    self.hover = False
    self.update()

def paint(self, painter, *args, **kwargs):
    painter.setRenderHint(QPainter.Antialiasing)
    if self.hasFocus() or self.hover:
        painter.setPen(self.pen_selected)
    else:
        painter.setPen(self.pen())
    painter.drawPath(self.path())

【问题讨论】:

  • 请在您突出显示项目 B 的位置显示代码

标签: python qt pyqt pyside


【解决方案1】:

无论您在做什么来突出显示项目 B,在 B 的 dragEnterEvent 中也这样做,这样当其他项目被拖动到 B 上时,它就会突出显示。

【讨论】:

  • 只有在 A 开始 QDrag 时才有效。如果我这样做,A 不再随光标移动,所以我只需设置 ItemIsMovable 标志而不点击拖放系统。
【解决方案2】:

我最终从 A 的 mouseMoveEvent 发送了一个信号,并从 QGraphicsScene 在 B 中设置了悬停属性。

它有效,但不是最优雅的解决方案。如果有人有更好的方法,请发布,我会更改接受的答案。

【讨论】:

    猜你喜欢
    • 2019-03-29
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2012-01-26
    相关资源
    最近更新 更多