У меня есть графический менеджер, который используется для управления и взаимодействия с графикой с помощью мыши.
Внутри 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() ) );
}
Этот код используется в двух разных проектах, и в одном проекте меню отображается должным образом, а в другом проекте меню не отображается, но может принимать щелчки мышью (у меня изначально была проблема с немедленным закрытием меню).
Разница между проектами заключается в иерархии виджетов, в которой находится 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, чтобы оно больше не было полноэкранным.
Задача ещё не решена.