J'ai un QGraphicsView
à l'intérieur du MainWindow
qui a implémenté un QGraphicScene
. J'ai besoin de faire apparaître un widget lorsque je clique avec le bouton droit de la souris sur une certaine partie du QGraphicScene
. Le parent du widget doit être MainWindow
.Coordonnées d'accès du parent d'un widget
Mon problème est que je dois vérifier la validité de la partie sur witch je cliqué dans un mousePressEvent
dans QGraphicScene
et pour faire apparaître le widget exactement au même endroit, mais les coordonnées du QGraphicScene
et MainWindow
sont évidentes pas les mêmes . Pour cela j'utilise un signal personnalisé qui déclenche un slot à l'intérieur MainWindow
et obtient les coordonnées du mousePressEvent
du MainWindow
. Le problème est que le mouseEvent
du QGraphicsScene
est déclenché avant le mouseEvent
de MainWindow
. Cela prend tout son sens et fonctionne si je clique deux fois sur le bouton droit de la souris, mais j'en ai besoin pour travailler dès le premier clic droit.
Je ne peux pas implémenter un filtre ou modifier le focus car j'ai des tonnes d'événements dans l'application.
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();
}
}
C'est une très bonne solution. Je parviens à envoyer le point où je souhaite faire apparaître le widget avec un signal à la MainWindow. Là, j'ai utilisé mapFromScene sur QGraphicsView avec ce point. – student