큰 사각형과 내부에 작은 사각형이있는 Qt (Python의 PySide 바인딩 사용)에 QGraphicsPathItem
이 있습니다. 기본 채우기 규칙 (Qt.OddEvenFill
)으로 인해 내부 사각형이 투명합니다. 이것은 효과적으로 구멍이있는 모양을 그립니다.QGraphicsItem에서 구멍이있는 도형에 마우스를 가져 가면 어떻게됩니까?
이제 enter, leave, click ...와 같은 마우스 이벤트를 듣고 싶습니다. .. QGraphicsItem
을 구현하는 간단한 방법은 구멍이 여전히 일부이기 때문에 마우스 이벤트를 만들지 않습니다. 항목이 채워지지 않더라도.
윤곽선이 QPainterPath
또는 하나 또는 여러 개의 다각형으로 정의되고 구멍을 가질 수있는 사용자 정의 모양을 표시하고 마우스가 구멍에 들어가면 모양 외부로 간주되는 모양을 표시 할 파생물을 갖고 싶습니다.
예 모양 (마우스 내부 사각형 인 경우가 형상 및 마우스 휴가 이벤트 외부로 간주되어야가 실행되어야 함) :
그러나이 솔루션은해야 구멍이있는 임의의 모양에 대해 작업합니다. 주어진 위치를 특정 (내측) 경로 인 경우 PySide/파이썬 3.3
from PySide import QtCore, QtGui
class MyPathItem(QtGui.QGraphicsPathItem):
def __init__(self):
super().__init__()
self.setAcceptHoverEvents(True)
def hoverEnterEvent(self, event):
print('inside')
def hoverLeaveEvent(self, event):
print('outside')
app = QtGui.QApplication([])
scene = QtGui.QGraphicsScene()
path = QtGui.QPainterPath()
path.addRect(0, 0, 100, 100)
path.addRect(25, 25, 50, 50)
item = MyPathItem()
item.setPath(path)
item.setBrush(QtGui.QBrush(QtCore.Qt.blue))
scene.addItem(item)
view = QtGui.QGraphicsView(scene)
view.resize(200, 200)
view.show()
app.exec_()
결국 간단하지만 '모양'이 기본적으로 경계 사각형을 반환한다는 것을 모를 경우 조금 직관력이 떨어집니다. 그래서 여기에 질문을 남깁니다. – Trilarion