我创建了自己的 QGraphicsRectItem,但问题是它的鼠标悬停事件方法不起作用。
编码:
import sys
from PyQt5.QtCore import Qt, QRectF
from PyQt5.QtWidgets import \
QGraphicsScene, QGraphicsRectItem, QGraphicsView, QMainWindow, QApplication
class CustomRectItem(QGraphicsRectItem):
def mousePressEvent(self, event):
print('mousePressEvent')
def mouseReleaseEvent(self, event):
print('mouseReleaseEvent')
def hoverMoveEvent(self, event):
print('hoverMoveEvent')
def hoverLeaveEvent(self, event):
print('hoverLeaveEvent')
def hoverEnterEvent(self, event):
print('hoverEnterEvent')
class CustomScene(QGraphicsScene):
def __init__(self, parent=None):
super(CustomScene, self).__init__(QRectF(-500, -500, 500, 200), parent)
rect = CustomRectItem()
rect.setRect(50, 50, 50, 50)
rect.setBrush(Qt.green)
self.addItem(rect)
class Window(QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.scene = CustomScene(self)
view = QGraphicsView(self.scene, self)
view.setSceneRect(0, 0, 500, 200)
view.setGeometry(0, 0, 600, 300)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = Window()
mainWindow.setWindowTitle('App')
mainWindow.setGeometry(50, 50, 800, 500)
mainWindow.show()
sys.exit(app.exec_())
在元素上调用setAcceptHoverEvents方法,然后将处理悬停事件:
只需在@gil9red 的正确答案中添加一个更实用的示例: