2016-08-23 60 views
0

我在MainWindow內部有一個QGraphicsView,它已實施QGraphicScene。當我在QGraphicScene的某個部分上右擊鼠標時,我需要彈出一個小部件。小部件的父級必須是MainWindow從部件的父級訪問座標

我的問題是,我需要覈實一下我在QGraphicScene,並在同一個位置,彈出小窗口mousePressEvent內點擊巫部分的有效性,但QGraphicSceneMainWindow的座標是明顯不一樣的。爲此,我使用自定義信號觸發MainWindow內的插槽,並從MainWindowmousePressEvent獲取座標。問題在於QGraphicsScenemouseEventmouseEventMainWindow之前被觸發。如果我右鍵單擊兩次,但這需要它從第一次右鍵單擊工作,這是非常有意義的。

我無法實現過濾器或更改焦點,因爲我在應用程序中有大量事件。

QGraphicScene:

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

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

主窗口:

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