9

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

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

没有这样的插槽,并且分别:

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

尝试实施onMouseRelease事件时。

4

2 回答 2

11

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

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

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

另请参阅 Qt 的菜单示例

于 2012-05-26T14:00:29.587 回答
11

您可以重新实现该类的contextMenuEvent方法QGraphicsScene,这将使您能够访问场景坐标以及屏幕坐标(与 相反QGraphicsView,它也可以工作但没有此信息):

void YourGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    // event->scenePos() is available
    QMenu menu(this);
    menu.addAction(...);
    menu.addAction(...);
    ...
    menu.exec(event->screenPos());
}
于 2012-12-24T02:19:34.930 回答