2016-08-23 2 views
0

QGraphicScene을 구현 한 MainWindow 안에 QGraphicsView이 있습니다. QGraphicScene의 특정 부분을 마우스 오른쪽 버튼으로 클릭 할 때 위젯을 팝업해야합니다. 위젯의 부모는 MainWindow이어야합니다.위젯의 부모로부터 좌표에 액세스

내 문제는 내가 QGraphicScene과 동일한 위치에 위젯을 팝업에 mousePressEvent 내부 클릭 마녀 부분의 유효성하지만 QGraphicSceneMainWindow의 좌표를 확인해야합니다 같은 명확하지 않은 것입니다 . 이를 위해 MainWindow 내부의 슬롯을 트리거하는 맞춤 신호를 사용하고 mousePressEvent에서 MainWindow의 좌표를 가져옵니다. 문제는 mouseEventQGraphicsScene에서 시작되어 mouseEventMainWindow에서 시작된다는 것입니다. 이것은 두 번 오른쪽 클릭하면 완벽하게 이해되고 작동하지만 첫 번째 오른쪽 클릭으로 작업해야합니다.

응용 프로그램에서 많은 이벤트가 발생하여 필터를 구현하거나 포커스를 변경할 수 없습니다.

QGraphicScene :

void CGraphicScene :: mousePressEvent(QGraphicsSceneMouseEvent *event) 
{ 
    if(event -> button() == Qt::RightButton) 
    { 
     //test stuff 

     emit signalChangeContextualMenuPosition(); 
     m_contextualMenu -> show(); 
    } 
} 

MainWindow를 :

CGraphicScene *scene; 
    CContextualMenu *m_contextualMenu; 
    m_contextualMenu = new CContextualMenu(this); 
    m_contextualMenu ->close(); 
    scene = new CGraphicScene(m_contextualMenu); 

    ui->gvInterface -> setScene(scene); 
    connect(scene, SIGNAL(signalChangeContextualMenuPosition()), this, SLOT(openPopUp())); 

    void MainWindow :: openPopUp() 
    { 
     m_contextualMenu ->move(m_xCoordPopMenu, m_yCoordPopMenu); 
    } 

    void MainWindow :: mousePressEvent(QMouseEvent *event) 
    { 
     if(event -> button() == Qt::RightButton) 
     { 
      m_xCoordPopMenu = event -> x(); 
      m_yCoordPopMenu = event -> y(); 
     } 
    } 

답변

2

사용 QGraphicsView::mapFromScene() 장면은 아마 당신이다 부모 위젯,의에 좌표를 매핑 한 후 QWidget::mapToParent()을보기 위젯 좌표 좌표 및 매핑 메인 윈도우. 유용한 방법은 QWidget::mapTo()입니다.

+0

아주 좋은 해결책입니다. MainWindow에 신호로 위젯을 표시하고 싶은 지점을 보내도록 관리합니다. QGraphicsView에서 mapFromScene을 사용했습니다. – student