我在MainWindow
内部有一个QGraphicsView
,它已实施QGraphicScene
。当我在QGraphicScene
的某个部分上右击鼠标时,我需要弹出一个小部件。小部件的父级必须是MainWindow
。从部件的父级访问坐标
我的问题是,我需要核实一下我在QGraphicScene
,并在同一个位置,弹出小窗口mousePressEvent
内点击巫部分的有效性,但QGraphicScene
和MainWindow
的坐标是明显不一样的。为此,我使用自定义信号触发MainWindow
内的插槽,并从MainWindow
的mousePressEvent
获取坐标。问题在于QGraphicsScene
的mouseEvent
在mouseEvent
从MainWindow
之前被触发。如果我右键单击两次,但这需要它从第一次右键单击工作,这是非常有意义的。
我无法实现过滤器或更改焦点,因为我在应用程序中有大量事件。
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();
}
}
这是一个非常好的解决方案。我设法发送一个信号到MainWindow的位置,让我想要弹出窗口小部件。在那里我用QGraphicsView上的mapFromScene和那个点。 – student