マウス入力を使用してグラフィックスを管理および操作するために使用されるグラフィック マネージャーがあります。
mousePressEvent (QWidget からオーバーライドされず、QWidget からマウスの位置とボタンを渡す通常のメソッドです) 内で、右クリック時およびグラフィックをクリックしたときに表示される QMenu を作成します。
if( button == Qt::RightButton && activeGraphic) {
QMenu menu("Edit", view());
QAction * deleteAction = new QAction( "Delete", &menu );
connect( deleteAction, &QAction::triggered, [=](bool) {
_lineGraphicHandler->releaseActiveGraphic();
_lineGraphicHandler->removeGraphic( activeGraphic );
});
menu.addAction( deleteAction );
QAction * settingsAction = new QAction( "Settings", &menu );
connect( settingsAction, &QAction::triggered, [=](bool) {
emit showSettings(QString::fromStdString(activeGraphic->type()));
});
menu.addAction( settingsAction );
connect( &menu, &QMenu::aboutToHide, [=] {
qDebug() << "menu closing";
});
connect( &menu, &QMenu::aboutToShow, [=] {
qDebug() << "menu opening";
});
menu.exec( view()->mapToGlobal( pos.toPoint() ) );
}
このコードは 2 つの異なるプロジェクトで使用され、一方のプロジェクトではメニューが期待どおりに表示され、もう一方のプロジェクトではメニューが表示されませんが、マウス クリックを受け入れることができます (当初、メニューがすぐに閉じられるという問題がありました)。
プロジェクト間の違いは、QMenu が存在するウィジェット階層にあります。
失敗したプロジェクト
graphichanlder - QObject
graphicsmode - QObject
graphicwidget - QFrame
graphicsview - QGraphicsView
作業中のプロジェクト
graphichanlder - QObject
graphicsmode - QObject
videotile - QGraphicsObject
graphicsScene - QGraphicsScene
この動作を引き起こしている可能性のあることは何ですか?
修理済み
私が抱えていた問題を説明するこのバグhttps://bugreports.qt-project.org/browse/QTBUG-7556を発見しました。QGLWidget の周りに余白を追加して修正し、全画面表示にならないようにしました。