QGraphicsView ведет себя по-разному, когда мышь удерживается над QGraphicsProxyWidget - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть графический интерфейс pyside2, который использует QGraphicsView.

Я использую setDragMode (QGraphicsView.ScrollHandDrag), чтобы сделать представление перетаскиваемым, но я переопределяю курсор с помощью viewport (). SetCursor (Qt.ArrowCursor) на mouseReleaseEvent, чтобы избежать постоянного присутствия открытой руки вместообычный стрелочный курсор.Это объясняется здесь: Изменение курсора в QGraphicsView (в c ++)

В графическом интерфейсе также есть QGraphicsProxyWidget с QLabel.Когда мышь помещается над ProxyWidget, viewport (). SetCursor (Qt.ArrowCursor) не работает (вызывается moseReleaseEvent, поэтому я знаю, что setCursor вызывается), а когда мышь покидает ProxyWidget, с открытой ладоньюкурсор отображается вместо курсора-стрелки.

Когда курсор мыши помещается во всех других местах в QGraphicsView, все работает как положено.

Кто-нибудь знает, почему setCursor ведет себя по-разному, когда мышьнаходится над proxyWidget?

В 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
...