我有一个图形管理器,用于使用鼠标输入管理图形并与之交互。
在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周围添加边距来修复它,使其不再是全屏。