Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QGraphicsProxyWidget搞乱了鼠标光标的更改_Python_Qt_Pyside2_Qgraphicsview - Fatal编程技术网

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()