2014-04-01 2 views
0

QT에 대한 지식이 부족한 경우 시도해 볼 필요가 없으면 시간 낭비를 피하려고합니다.QT에 이벤트 필터를 설치하십시오.

QGraphicsItems에서 파생되지 않은 클래스 X가 있고 그 중 여러 개의 QGraphicsItems가 포함 된 필드가 있다고 가정합니다. X에서 이벤트 필터를 정의하고 QGraphicsItems에 이벤트 필터를 설치하여 X가 QGraphicsItem 자체보다 먼저 이벤트를 수신하도록 할 수 있습니까? 감사합니다. .

+0

은'QObject를 :: installEventFilter (QObject를 *)는 '모두 인수 및 클래스 QGraphicsItem'는 QObject를 아니다'QObject's 수 있지만한다. 네가 X 클래스가 뭔지 모르겠다. 그러므로 나는 불가능하다고 생각한다. – vahancho

+0

물론, 실제로 이벤트를 수신하는 오브젝트에 이벤트 필터를 설치하려고합니다. Qt에서 이러한 객체는 'QObject'에서 파생되어야합니다. 따라서'QGraphicsScene'에 도달하는 이벤트를 필터링해야합니다. –

답변

0

QGraphicsItem에서 상속 한 객체가 아니라 디자인이 허용되는 경우 QGraphicsObject에서 상속받으며 표준 QObject :: installEventFilter를 사용할 수 있습니다.

그렇지 않으면 QGraphicsItem에서 상속받은 클래스 'X'가 있어야합니다.

그런 다음 QGraphicsScene을 통해 하나의 GraphicsItem에서 다른 GraphicsItem으로 이벤트 필터를 설치할 수 있습니다. 자세한 내용은 the Qt Documentation here입니다.

다른 항목의 이벤트를 필터링하려면이 항목을 다른 항목의 이벤트 필터로 설치하십시오.

예 : 기능에서

QGraphicsScene scene; 
QGraphicsEllipseItem *ellipse = scene.addEllipse(QRectF(-10, -10, 20, 20)); 
QGraphicsLineItem *line = scene.addLine(QLineF(-10, -10, 20, 20)); 

line->installSceneEventFilter(ellipse); 
// line's events are filtered by ellipse's sceneEventFilter() function. 

ellipse->installSceneEventFilter(line); 
// ellipse's events are filtered by line's sceneEventFilter() function. 
+0

감사합니다. 그것은 내 인생을 더욱 복잡하게 만듭니다. 기본적으로 QGraphicsItems 클래스와 비 QT 매개 변수가 필요한 클래스가 필요합니다. QGraphicsItem은 마우스가 마우스를 가리킬 때 나머지 QGraphicsItem을 숨기거나 구울 수 있습니다. – Francesco