2014-05-25 6 views
1

다음과 같이 나는 검은 배경에 타원의 무리를 그릴 수있는 QWidgetQPainter을 사용하고 있습니다 : 그려진 타원의 무리 후pyside에 그려진 타원에 마우스 클릭을 감지하는 방법은 무엇입니까?

paint = QPainter() 
paint.begin(self) 

paint.setBrush(Qt.black) 
paint.drawRect(event.rect()) 

brush = ... 
paint.setBrush(brush) 
paint.drawEllipse(center, rad, rad) 

하고 나는 그런 중 하나에 마우스 클릭을 감지 할 기존의 타원. 나는 QPainter에 대한 설명서에서 어떤 것도 발견하지 못했습니다.

QPainter 대신 다른 것을 사용해야하는 경우 위의 예를 다른 프레임 워크에서 보여주는 예제를 제공하십시오.

+0

당신이 코드는 paintEvent 또는 비슷한에 넣고 의미를? 위젯에서 업데이트를 호출하는 마우스 클릭 이벤트에 부울 변수를 설정할 수 없습니까? 그러면 해당 이벤트가 트리거되어 부울 변수를 검사하고 설정되어있는 경우 타원을 그립니다. 어떻게 들리니? – lpapp

+0

어떤 식 으로든 타원을 그려야합니다. 마우스 클릭과 독립적입니다. 그러나 타원 중 하나를 클릭하면 메서드가 호출되기를 원합니다. – Alex

+0

좋아, 알 겠어,하지만 왜 다른 문제를 마지막에 게시하는지 이해가 안돼. 그것은 주된 질문과 관련이없는 것 같습니다. 또한'classses'에 오타가 있습니다. – lpapp

답변

1

다음과 같이 사용자 정의 영역을 직접 감지해야합니다

def mousePressEvent(self, event): 
    ''' You will have to implement the contain algorithm yourself''' 
    if sel.fo(even.pos()): 
     self.myMethod() 

QGraphicsEllipseItem.contains() 또는

를, 그것은 contains-logic implemented and offered을 가지고 있기 때문에 당신이 QGraphicsEllipseItem에 볼 수 있었다.

def mousePressEvent(self, event): 
    if self.contains(event.pos()): 
     self.myMethod() 

하고 해당 매개 변수를 사용하여 객체 생성 :

scene = QGraphicsScene() 
ellipseItem = MyGraphicsEllipseItem(centerx, centery, rad, rad) 
scene.addItem(ellipseItem) 

view = QGraphicsView(scene) 
view.show() 

scene.setBackgroundBrush(Qt.black) 
+0

하지만이'QGraphicsElliseItem'을 어떻게 사용해야합니까? 이 문서는'QGraphicsScene'에 그것을 추가하는 것을 말합니다. QWidget에'QGraphicsScene'을 어떻게 추가할까요? 직접 할 수 있습니까? 또는 다른 것을 추가해야합니까? 나는 예제 코드가 필요하다! – Alex

+0

@Alex : Qt를 처음 접하십니까? QGraphicsView는 QWidgets와 완전히 다른 프레임 워크입니다. 당신은 어느쪽으로 든 그것을 할 수 있습니다. 당신은 QML을 할 수도 있지만 QWidgets를 고수하고 싶다면 직접 구현해야합니다. 미안합니다. 그것이 바로 그시기입니다. 그것을 극복하고 물건을하십시오. – lpapp

+0

예, Qt를 처음 접했을 때 (종종 완전히 혼란 스럽습니다), 이것이 다른 프레임 워크라는 것을 몰랐습니다. 이 다른 프레임 워크를 사용해 볼 수 있습니다. 그것에서'QGraphicsView'는'QWidget'에 해당합니까? 그들은 비슷한 방법을 가지고 있습니까? 당신이 간단한 예제 코드 템플릿을 제공 할 수 없으므로 원칙적으로 그것을하는 방법을 본다. – Alex