Python QGraphicsProxyWidget搞乱了鼠标光标的更改
我有一个Python QGraphicsProxyWidget搞乱了鼠标光标的更改,python,qt,pyside2,qgraphicsview,Python,Qt,Pyside2,Qgraphicsview,我有一个QGraphicsView,在这里我做各种鼠标操作,在做鼠标操作时,我改变鼠标光标以给用户提供视觉线索 我最近在我的场景中加入了一些QWidget,它会自动创建QGraphicsProxyWidget对象。在放置这些小部件之后,我开始对鼠标光标的更改产生问题。我可以更改鼠标光标,直到我将鼠标悬停在QGraphicsProxyWidget项上。之后,我的鼠标光标更改停止生效 我在PySide2中创建了一个最小的示例: 导入系统 从PySide2.QtGui导入QMouseEvent,Qt
QGraphicsView
,在这里我做各种鼠标操作,在做鼠标操作时,我改变鼠标光标以给用户提供视觉线索
我最近在我的场景中加入了一些QWidget,它会自动创建QGraphicsProxyWidget
对象。在放置这些小部件之后,我开始对鼠标光标的更改产生问题。我可以更改鼠标光标,直到我将鼠标悬停在QGraphicsProxyWidget
项上。之后,我的鼠标光标更改停止生效
我在PySide2中创建了一个最小的示例:
导入系统
从PySide2.QtGui导入QMouseEvent,Qt
从PySide2.qtwidts导入QApplication、QLabel、QGraphicsView、QGraphicscene
类CustomGraphicsView(QGraphicsView):
def MousePresseEvent(self,事件:QMouseEvent):
super().mousePressEvent(事件)
self.setCursor(Qt.ClosedHandCursor)
event.accept()
def mouseReleaseEvent(self,event:QMouseEvent):
super().mouseReleaseEvent(事件)
self.setCursor(Qt.ArrowCursor)
event.accept()
如果名称=“\uuuuu main\uuuuuuuu”:
app=QApplication(sys.argv)
graphics\u view=CustomGraphicsView()
场景=qgraphicscene(0,0,1000,1000)
图形视图.设置场景(场景)
label=QLabel(“你好世界”)
label\u font=label.font()
标签字体设置点大小(50)
label.setFont(label\u字体)
label\u proxy=scene.addWidget(标签)
标签_proxy.setPos(400450)
图形_view.show()
app.exec()
复制:首先,单击场景中的任意位置,而不将鼠标悬停在“Hello World”文本上。您将看到鼠标光标变为闭合的手。然后将鼠标悬停在“Hello World”文本上,然后再次尝试单击场景中的任意位置。您将看到光标不再改变
我不确定这是否是预期的行为或bug。这种行为的原因可能是什么
系统
操作系统:Windows 10 20H2
Python 3.8.6 64位
PySide2 5.15.2免责声明:仍在调查该行为的原因,因此在撰写本回答时,我将仅给出解决方案。但QGraphicsProxyWidget似乎没有正确处理事件的传播。有关更多信息,请参见此
与其在QGraphicsView中设置光标,不如在视口中设置光标
class CustomGraphicsView(QGraphicsView):
def MousePresseEvent(self,事件:QMouseEvent):
super().mousePressEvent(事件)
self.viewport().setCursor(Qt.ClosedHandCursor)
event.accept()
def mouseReleaseEvent(self,event:QMouseEvent):
super().mouseReleaseEvent(事件)
self.viewport().cursor()
event.accept()