从小部件的父级访问坐标

Access coordinates from the parent of a widget

我在 MainWindow 中有一个 QGraphicsView 已经实现了 QGraphicScene。我需要在 QGraphicScene 的某个部分右键单击鼠标时弹出一个小部件。小部件的父级需要为 MainWindow

我的问题是我需要验证 部分的有效性 我在 QGraphicScene 中的 mousePressEvent 中单击并在完全相同的位置弹出小部件但是QGraphicSceneMainWindow的坐标明显不一样。为此,我使用自定义信号触发 MainWindow 内的插槽,并从 MainWindowmousePressEvent 获取坐标。问题是 QGraphicsScene 中的 mouseEventMainWindow 中的 mouseEvent 之前被触发。如果我右键单击两次,这是非常有意义的,但我需要它从第一次右键单击开始工作。

我无法实施过滤器或更改焦点,因为我在应用程序中有大量事件。

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();
        }
    }

使用 QGraphicsView::mapFromScene() 将场景坐标映射到视图小部件坐标,然后 QWidget::mapToParent() 将坐标映射到它的父小部件,这可能是您的主要 window。您还可以找到有用的方法 QWidget::mapTo().