从小部件的父级访问坐标
Posted
技术标签:
【中文标题】从小部件的父级访问坐标【英文标题】:Access coordinates from the parent of a widget 【发布时间】: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();
【问题讨论】:
【参考方案1】:使用QGraphicsView::mapFromScene()
将场景坐标映射到视图小部件坐标,然后使用QWidget::mapToParent()
将坐标映射到它的父小部件,这可能是您的主窗口。您还可以找到有用的方法QWidget::mapTo()
。
【讨论】:
这是一个非常好的解决方案。我设法将我希望用信号弹出小部件的点发送到主窗口。在那一点上,我在 QGraphicsView 上使用了 mapFromScene。以上是关于从小部件的父级访问坐标的主要内容,如果未能解决你的问题,请参考以下文章