2010-05-19 109 views

回答

2

我不知道为什么信号已经被删除,但它仍然是一个QWidget让您可以随时覆盖

void QWidget::contextMenuEvent (QContextMenuEvent*); 

void QWidget::customContextMenuRequested(const QPoint& pos); 

取决于上下文菜单策略设置窗口小部件。

+2

customContextMenuRequested()是一个信号,而不是重写功能 – 2010-05-20 16:52:29

6

我不知道你要完成的任务,但你可以很容易地通过调用QWidget::AddAction(QAction*)与您要添加到您的上下文菜单中的操作和设置的上下文菜单策略添加上下文菜单在任何部件

widget->setContextMenuPolicy(Qt::ActionsContextMenu); 

部件将准备,并显示上下文菜单,所有你需要做的就是挂钩的行动triggered()信号发送到相应的处理程序

16

取决于您如何设置在QWidgetContextMenuPolicy你有几个选项。

如果您已将其设置为Qt::DefaultContextMenu,则只需覆盖QWidget中的contextMenuEvent(QContextMenuEvent*)受保护功能。我相信这是默认设置。

如果您已将其设置为Qt::ActionsContextMenu,那么只需将所有操作添加到您的小部件,并让Qt系统处理显示上下文菜单。

或者如果您已将其设置为Qt::CustomContextMenu,则需要连接到customContextMenuRequested()信号并实施您自己的上下文菜单处理程序。

这全部记录在网上的ContextMenuPolicy文档中。

+0

更新链接到ContextMenuPolicy描述: [QT5](http://doc.qt.io/qt-5/qwidget.html#contextMenuPolicy-prop)和 [QT4](http://doc.qt.io/qt-4.8/qwidget.html#contextMenuPolicy-prop) – avtomaton 2015-07-01 08:25:02