QGraphicScene
을 구현 한 MainWindow
안에 QGraphicsView
이 있습니다. QGraphicScene
의 특정 부분을 마우스 오른쪽 버튼으로 클릭 할 때 위젯을 팝업해야합니다. 위젯의 부모는 MainWindow
이어야합니다.위젯의 부모로부터 좌표에 액세스
내 문제는 내가 QGraphicScene
과 동일한 위치에 위젯을 팝업에 mousePressEvent
내부 클릭 마녀 부분의 유효성하지만 QGraphicScene
및 MainWindow
의 좌표를 확인해야합니다 같은 명확하지 않은 것입니다 . 이를 위해 MainWindow
내부의 슬롯을 트리거하는 맞춤 신호를 사용하고 mousePressEvent
에서 MainWindow
의 좌표를 가져옵니다. 문제는 mouseEvent
이 QGraphicsScene
에서 시작되어 mouseEvent
이 MainWindow
에서 시작된다는 것입니다. 이것은 두 번 오른쪽 클릭하면 완벽하게 이해되고 작동하지만 첫 번째 오른쪽 클릭으로 작업해야합니다.
응용 프로그램에서 많은 이벤트가 발생하여 필터를 구현하거나 포커스를 변경할 수 없습니다.
QGraphicScene :
void CGraphicScene :: mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if(event -> button() == Qt::RightButton)
{
//test stuff
emit signalChangeContextualMenuPosition();
m_contextualMenu -> show();
}
}
MainWindow를 :
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