当我的光标在我的QGraphicsScene
中的QGraphicsItem
上时,我想要弹出一些小文本。我有一个继承自QGraphicsItem
的类,它代表了我在场景中的图形项目。QGraphicsItem悬停事件(PyQt4)
我试过使用QGraphicsItem.hoverEnterEvent
,我也设置了setAcceptHoverEvents(True)
,但我仍然无法启用该悬停事件。我也遇到了一个事件过滤器的方法,但我不知道在哪里实现它。
我应该在QGraphicsItem
课程或场景中安装事件过滤器吗?我尝试了两种方法,但仍未获得理想的效果。我希望能够将鼠标悬停在场景中的所有项目上。
更新: 所以我尝试这样做,但悬停事件仍然没有被检测到。
class graphics_Object(QtGui.QGraphicsPixmapItem):
def __init__(self, parent=None):
super(graphics_Object, self).__init__(parent)
pixmap = QtGui.QPixmap("item.png")
self.graphics_pixItem = QtGui.QGraphicsPixmapItem(pixmap.scaled(40, 40, QtCore.Qt.KeepAspectRatio))
self.graphics_pixItem.setFlag(QtGui.QGraphicsPixmapItem.ItemIsSelectable)
self.graphics_pixItem.setFlag(QtGui.QGraphicsPixmapItem.ItemIsMovable)
self.graphics_pixItem.setAcceptHoverEvents(True)
def hoverEnterEvent(self, event):
print 'hello'
class graphicsScene(QtGui.QGraphicsScene):
def __init__(self, parent=None):
super(graphicsScene, self).__init__(parent)
def mousePressEvent(self, event):
self.graphics_item = graphics_Object()
def mouseReleaseEvent(self, event)
self.addItem(self.graphics_item.graphics_pixItem)
self.graphics_item.graphics_pixItem.setPos(event.scenePos())
class Form(QtGui.QMainWindow):
def __init__(self):
super(Form, self).__init__()
self.ui = uic.loadUi('form.ui')
self.scene = graphicsScene()
self.ui.view.setScene(self.scene)
self.setMouseTracking(True)
您是否继承'QGraphicsItem'?这是使用'hoverEnterEvent'的唯一方法。 'QGraphicsItem'不是'QObject',所以你不能在其上安装一个事件过滤器(虽然你可以将它的事件传递到*另一个*'QGraphicsItem'上,但我认为这对你没有帮助)。 –
谢谢你的回应,我已经更新了我的代码,我尝试了继承QGraphicsPixmapItem,但悬停事件仍然没有被检测到 – neziy
尝试将鼠标追踪放在graphicsview上,而不是主窗口 –