0

我有一个图形管理器,用于使用鼠标输入管理图形并与之交互。

在 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 周围添加一个边距来修复它不再是全屏的。

4

0 回答 0