在QGraphicsScene上显示弹出菜单单击或右键单击

时间:2012-05-26 13:45:09

标签: qt contextmenu qgraphicsscene qmouseevent

当用户右键点击场景的空白部分时,有没有办法显示弹出窗口?

我是Qt的新手,我尝试了插槽和子类化,但无济于事。

没有这样的插槽,分别是:

  

“错误:'QMouseEvent'尚未声明”

尝试实施onMouseRelease事件时。

2 个答案:

答案 0 :(得分:10)

QGraphicsView是用于显示QGraphicsScene内容的小部件。因此,实现上下文菜单(弹出菜单)的正确位置是QGraphicsView。

你需要重新实现contextMenuEvent函数是你自己继承自QGraphicsView的类:

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

另请参阅Qt的Menus Example

答案 1 :(得分:7)

您可以重新实现contextMenuEvent类的QGraphicsScene方法,这样您就可以访问场景坐标和屏幕坐标(而不是QGraphicsView,也有效,但没有这方面的信息):

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