我在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