0

我有一个使用 QGraphicsView 的 pyside2 GUI。

我使用 setDragMode(QGraphicsView.ScrollHandDrag) 使视图可拖动,但我在 mouseReleaseEvent 上使用 viewport().setCursor(Qt.ArrowCursor) 覆盖光标,以避免经常使用张开手而不是普通箭头光标。此处对此进行了解释:Changing cursor in a QGraphicsView (in c++)

在 GUI 中还有一个带有 QLabel 的 QGraphicsProxyWidget。当鼠标放在 ProxyWidget 上时, viewport().setCursor(Qt.ArrowCursor) 不起作用(调用了 moseReleaseEvent,所以我知道调用了 setCursor),当鼠标离开 ProxyWidget 时,张开的手光标显示而不是箭头光标。

当鼠标放在 QGraphicsView 中的所有其他位置时,一切都按预期工作。

有谁知道为什么当鼠标放在 proxyWidget 上时 setCursor 的行为会有所不同?

在 QGraphicsView 中:

def mouseReleaseEvent(self, event):
    QGraphicsView.mouseReleaseEvent(self, event)
    self.viewport().setCursor(Qt.ArrowCursor)


def infoBoxShow(self, edge, mouse_pos):
    if self.info_box is None:
        self.info_box = VardeInfoBox_v2.InfoBox()
        self.info_box.corresponding_edge = edge
        self.info_box.setPos(mouse_pos)
        self.info_box.setInfoText(edge)

        self.main_scene.addItem(self.info_box)

InfoBox(如您所见,我尝试设置一些标志但没有成功):

class InfoBox(QGraphicsItem):
Type = QGraphicsItem.UserType + 1

def __init__(self):
    QGraphicsItem.__init__(self)

    self.setFlag(QGraphicsItem.hover)
    self.setZValue(4)

    proxy = QGraphicsProxyWidget(self)

    widget = QLabel("TEST!")
    widget.setAttribute(Qt.WA_TransparentForMouseEvents)
    widget.setWindowModality(Qt.NonModal)

    proxy.setWidget(widget)


    self.corresponding_edge = None
4

0 回答 0