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