【发布时间】:2016-08-23 06:25:16
【问题描述】:
我在MainWindow 中有一个QGraphicsView,它实现了QGraphicScene。当我在QGraphicScene 的某个部分上单击鼠标右键时,我需要弹出一个小部件。小部件的父级必须是MainWindow。
我的问题是我需要验证我在QGraphicScene 中的mousePressEvent 内单击的女巫部分的有效性,并在完全相同的位置弹出小部件但QGraphicScene 和@ 的坐标987654329@显然不一样。为此,我使用自定义信号触发MainWindow 内的插槽,并从MainWindow 的mousePressEvent 获取坐标。问题是来自QGraphicsScene 的mouseEvent 在来自MainWindow 的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();
}
}
【问题讨论】:
标签: c++ qt qgraphicsview qgraphicsscene