Отображение всплывающего меню на qgraphicsscene нажмите или щелкните правой кнопкой мыши

есть ли способ показать всплывающее окно, когда пользователь щелкает правой кнопкой мыши на пустой части сцены?

Я новичок в Qt и я пробовал слоты и подклассы, но безрезультатно.

нет такого слота и, соответственно:

"ошибка: 'QMouseEvent' не был объявлен"

при попытке реализации onMouseRelease событие.

2 ответов


QGraphicsView-виджет, используемый для отображения содержимого QGraphicsScene. Таким образом, правильным местом для реализации контекстного меню (всплывающее меню) является QGraphicsView.

вам нужно переопределить функцию contextMenuEvent-это ваш собственный класс, унаследованный от QGraphicsView:

void YourGraphicsView::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu menu(this);
    menu.addAction(...);
    menu.addAction(...);
    ...
    menu.exec(event->globalPos());
}

см. также Qt Пример Меню.


вы можете повторно использовать тег contextMenuEvent метод QGraphicsScene класс, который даст вам доступ к координатам сцены ,а также координатам экрана (в отличие от QGraphicsView, который также работает, но не имеет этой информации):

void YourGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    // event->scenePos() is available
    QMenu menu(this);
    menu.addAction(...);
    menu.addAction(...);
    ...
    menu.exec(event->screenPos());
}