2013-07-31 1 views
0

안녕 내 응용 프로그램에서 나는를 QGraphicsView을 만들고 그 위에 장면 설정 해요 :이상한 제어 경계 감지

QGraphicsProxyWidget *rotateItemIcon; 

HoverFilter *hv = new HoverFilter(); // my hover filter class 

connect(hv,SIGNAL(SignalHover(QObject*)),this,SLOT(ObjectHover(QObject*))); 
connect(hv,SIGNAL(SignalHoverLeave(QObject*)),this,SLOT(ObjectHoverLeave(QObject*))); 
ui->TestIcon->installEventFilter(hv); 
... 
scene = new QGraphicsScene(this); 
scene->setSceneRect(0, 0, 661, 255); 

ui->TestIcon->setParent(NULL); 


rotateItemIcon = scene->addWidget(ui->TestIcon); // here i add my control to the scene and receive QGraphicsProxyWidget object 
rotateItemIcon->setTransformOriginPoint(ui->TestIcon->width()/2, 
              ui->TestIcon->height()/2); 


ui->graphicsViewFive->setScene(scene); //QGraphicsView on my form 
ui->graphicsViewFive->show(); 

내 HoverFilter.cpp

#include "hoverfilter.h" 
#include "QDebug" 
HoverFilter::HoverFilter() 
{ 
} 
bool HoverFilter::eventFilter(QObject *dist, QEvent *event) 
{ 

if(event->type() == QEvent::Enter) 
{ 
     emit SignalHover(dist); 
     return true; 
} 

if(event->type() == QEvent::Leave) 
{ 
     emit SignalHoverLeave(dist); 
     return true; 
} 


return false; 
} 

rotateItemIcon 내 QGraphicsProxyWidget이다하고 문제는 이상한 경계가 있다는 것입니다. 내 컨트롤의 마우스를 가져 가면 일부 애니메이션을 구현해야합니다. TestIcon (이벤트 필터를 사용하여 완료) 마우스를 입력하고 마우스를 놓으면 마우스가 무작위로 드래그됩니다. 제어. QGraphicsScene 호버 감지에 내 컨트롤을 추가하지 않으면 잘 작동하므로 이것이 장면/프록시 위젯 문제라고 가정합니다. QGraphicsProxyWidget에 크기 또는 경계를 설정하여이를 막을 수있는 방법이 있습니까?

답변

0

질문을 완전히 이해할 수 있을지 모르겠지만 QGraphicsProxyWidget을 통해 장면에 배치 된 위젯이있는 것처럼 들리며 마우스가 원하는 위젯 위에 있는지 감지하려고 할 때 소리가납니다. 생명 있는.

'위젯 경계'란 프록시 위젯이 마우스를 위젯으로 인식하는 범위를 의미한다고 가정합니다. 그렇다면 QGraphicsProxyWidget에서 setGeometry를 호출하여 위치와 치수를 설정하거나 QGraphicsProxyWidget에서 상속하거나 boundingRect 함수를 구현하여 프록시 위젯의 영역을 정의하는 것이 좋습니다.

+0

죄송합니다. QGraphicsProxyWidget을 만드는 코드를 잊어 버렸습니다. 예를 들어 scene-> addWidget (TestIcon);을 사용하여 장면에 위젯을 배치하고, 호버 용 이벤트 필터가 TestIcon에 설치되어 있습니다. rotateIcon은 내 QGraphicsProxyWidget입니다. – SirLanceloaaat

+0

장면에 내 위젯을 추가하면 호버 감지가 중단됩니다. – SirLanceloaaat

+0

모든 코드를 추가하고 '휴식'의 의미를 설명하십시오. – TheDarkKnight