2014-10-08 3 views
0

qgraphicsview에는 장면이 포함되어 있으며 내부에 그래픽 항목이 있습니다. setcontextmenupolicy (qt :: actionscontextmenu)가 qgraphicsview에서 컨텍스트 메뉴를 활성화했지만, 이제 내 qgraphicsitem이 qgraphicsscenecontextmenuevent 이벤트를 수신 할 수 없습니다. 따라서 qgraphicsview의 컨텍스트 메뉴 만 나타납니다.qgraphicsview에서 qgraphicsitem과 다른 컨텍스트 메뉴를 얻는 방법은 무엇입니까?

어떻게 해결할 수 있습니까? 코드에서

+0

코드 예제를 제공하십시오; QGraphicsView에 "setContextMenu"함수가없는 것처럼 보입니다. http://qt-project.org/doc/qt-5/qgraphicsview-members.html setContextMenuPolicy를 의미 했습니까? – TheDarkKnight

+0

죄송합니다. 그것은 setcontextmenupolicy입니다. 나는 그것을 바꿀 것이다. – Nyaruko

+0

항목이 클릭되었는지 확인한 다음 해당 항목에 대해 컨텍스트 메뉴의 직접 실행 기능을 호출하면됩니까? – AngryDuck

답변

1

내가 다시 구현 내가 옳다 경우 이벤트 위치에있는 항목, 즉이 경우 contextMenuEvent 내가 먼저 확인 그런 QGraphicsScene

에서

을 상속에, 내 자신의 장면 클래스를 만들었습니다 아래 장면의 항목을 클릭합니다.

그럴 경우 해당 항목에 contextMenuEvent을 실행하십시오.

항목이 없거나 자신의 contextMenuEvent이없는 경우 컨텍스트 이벤트의 장면 버전 만 실행하면됩니다. QtCore로 QtGui 수입 PySide.QtCore로

수입 PySide.QtGui

import PySide.QtGui as QtGui 
import PySide.QtCore as QtCore 

class MyScene(QtGui.QGraphicsScene): 

    def __init__(self, *args, **kwargs): 
     super(self.__class__, self).__init__(*args, **kwargs) 

    def contextMenuEvent(self, event): 
     # Check it item exists on event position 
     item = self.itemAt(event.scenePos().toPoint()) 
     if item: 
      # Try run items context if it has one 
      try: 
       item.contextMenuEvent(event) 
       return 
      except: 
       pass 

     menu = QtGui.QMenu() 
     action = menu.addAction('ACTION') 
관련 문제