从小部件的父级访问坐标
Access coordinates from the parent of a widget
我在 MainWindow
中有一个 QGraphicsView
已经实现了 QGraphicScene
。我需要在 QGraphicScene
的某个部分右键单击鼠标时弹出一个小部件。小部件的父级需要为 MainWindow
。
我的问题是我需要验证 部分的有效性 我在 QGraphicScene
中的 mousePressEvent
中单击并在完全相同的位置弹出小部件但是QGraphicScene
和MainWindow
的坐标明显不一样。为此,我使用自定义信号触发 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();
}
}
使用 QGraphicsView::mapFromScene()
将场景坐标映射到视图小部件坐标,然后 QWidget::mapToParent()
将坐标映射到它的父小部件,这可能是您的主要 window。您还可以找到有用的方法 QWidget::mapTo()
.
我在 MainWindow
中有一个 QGraphicsView
已经实现了 QGraphicScene
。我需要在 QGraphicScene
的某个部分右键单击鼠标时弹出一个小部件。小部件的父级需要为 MainWindow
。
我的问题是我需要验证 部分的有效性 我在 QGraphicScene
中的 mousePressEvent
中单击并在完全相同的位置弹出小部件但是QGraphicScene
和MainWindow
的坐标明显不一样。为此,我使用自定义信号触发 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();
}
}
使用 QGraphicsView::mapFromScene()
将场景坐标映射到视图小部件坐标,然后 QWidget::mapToParent()
将坐标映射到它的父小部件,这可能是您的主要 window。您还可以找到有用的方法 QWidget::mapTo()
.