2016-08-23 61 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