【发布时间】:2010-05-19 21:38:43
【问题描述】:
我正在尝试将上下文(右键单击)菜单添加到 Qt QListView。我在 Qt 3.3 中看到有“contextMenuRequested”(我可以使用)-http://doc.qt.digia.com/3.3/qlistview.html#contextMenuRequested。但是,我在 Qt4 中看不到这样的方法。有谁知道如何向 QListView 添加上下文菜单?
【问题讨论】:
我正在尝试将上下文(右键单击)菜单添加到 Qt QListView。我在 Qt 3.3 中看到有“contextMenuRequested”(我可以使用)-http://doc.qt.digia.com/3.3/qlistview.html#contextMenuRequested。但是,我在 Qt4 中看不到这样的方法。有谁知道如何向 QListView 添加上下文菜单?
【问题讨论】:
根据您在QWidget 中设置ContextMenuPolicy 的方式,您有几个选项。
如果您已将其设置为Qt::DefaultContextMenu,则只需覆盖QWidget 中的contextMenuEvent(QContextMenuEvent*) 受保护函数。我相信这是默认设置。
如果您已将其设置为Qt::ActionsContextMenu,那么只需将所有操作添加到您的小部件并让 Qt 系统处理显示上下文菜单。
或者,如果您已将其设置为 Qt::CustomContextMenu,则需要连接到 customContextMenuRequested() 信号并实现您自己的上下文菜单处理程序。
所有这些都记录在ContextMenuPolicy 在线文档中。
我不知道您要完成什么,但您可以通过调用 QWidget::AddAction(QAction*) 并使用您想要添加到上下文菜单的操作并设置上下文菜单策略来轻松地向任何小部件添加上下文菜单
widget->setContextMenuPolicy(Qt::ActionsContextMenu);
小部件将准备并显示上下文菜单,您只需将操作triggered() 信号连接到适当的处理程序
【讨论】:
我不知道为什么信号被删除了,但它仍然是QWidget,所以你可以随时覆盖
void QWidget::contextMenuEvent ( QContextMenuEvent* );
或
void QWidget::customContextMenuRequested( const QPoint& pos );
取决于小部件的上下文菜单策略设置。
【讨论】: