私はMainWindow
の中にQGraphicsView
を持っていて、これはQGraphicScene
を実装しています。 QGraphicScene
の特定の部分を右クリックしてウィジェットをポップアップする必要があります。ウィジェットの親はMainWindow
である必要があります。ウィジェットの親からの座標にアクセス
私の問題は、私は私がQGraphicScene
にmousePressEvent
の内側をクリック魔女の部分の有効性を確認するために、そして正確に同じ場所でウィジェットをポップアップする必要がありますが、QGraphicScene
とMainWindow
の座標が同じ明白ではないということです。そのためには、MainWindow
のスロットをトリガするカスタム信号を使用し、mousePressEvent
のMainWindow
から座標を取得します。問題は、mouseEvent
のQGraphicsScene
がmouseEvent
より前にトリガーされて、MainWindow
になることです。これは完璧な意味を持ち、私が2度右クリックすると動作しますが、最初の右クリックから作業する必要があります。
アプリケーションに多数のイベントが含まれているため、フィルタを実装したり、フォーカスを変更することはできません。
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();
}
}
これは非常に素晴らしい解決策です。私はMainWindowへの信号でウィジェットをポップアップしたいところを送信することができます。 QGraphicsViewでmapFromSceneを使用しました。 – student