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

Qt 在QGraphics上显示弹出菜单单击或右键单击,qt,contextmenu,qgraphicsscene,qmouseevent,Qt,Contextmenu,Qgraphicsscene,Qmouseevent,当用户右键单击场景的空白部分时,是否有办法显示弹出窗口 我是Qt新手,我尝试过插槽和子类化,但都没有用 无此类插槽,分别为: “错误:“QMouseEvent”尚未声明” 当尝试实现onMouseRelease事件时。QGraphicsView是用于显示qgraphicscene内容的小部件。因此,实现上下文菜单(弹出菜单)的正确位置是QGraphicsView 您需要重新实现contextMenuEvent函数是您自己从QGraphicsView继承的类: void YourGraphicsV

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

我是Qt新手,我尝试过插槽和子类化,但都没有用

无此类插槽,分别为:

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


当尝试实现
onMouseRelease
事件时。

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

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

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

另请参见Qt。

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


谢谢它起作用了,但我需要做一些改变。1.首先,因为我的项目类型是QtGUI应用程序,所以我需要用我自己的QGraphicsView替换给定的QGraphicsView。为此,我手动编辑.ui文件并替换对象的类名。2.我在QGraphicsView子类化中使用了以下示例:。我必须修改构造函数以包含父小部件的参数:GraphWidget(QWidget*parent)[…]。然后简单地在这个类中实现上下文菜单事件就成功了。我是否可以用不同的方法来实现它,也许不需要手动修改.ui文件?您也可以在QtCreator的设计视图中使用“升级到…”将小部件类从QGraphicsView更改为您自己的类小部件上下文菜单中的操作。“Qt菜单示例”链接表单的答案已断开(今天,2016年9月1日),因此这里有一个指向Qt 5.7菜单示例的链接:这是一个很好的解决方案。QMenu菜单(此菜单);不起作用。您可以使用QMenu菜单(事件->小部件());使活动小部件充当QMenu的QWidget父项。实际上,似乎没有必要为菜单指定父项。QMenu menu()工作正常,因为上下文菜单本身就是一个窗口,并且位于屏幕坐标中。
void YourGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    // event->scenePos() is available
    QMenu menu(this);
    menu.addAction(...);
    menu.addAction(...);
    ...
    menu.exec(event->screenPos());
}