Qt QListView - 上下文菜单?

8
3个回答

20

根据您在 QWidget 中设置的 ContextMenuPolicy,您有几个选项。

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

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

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

所有这些都在在线文档的ContextMenuPolicy文件中有详细说明。


1
ContextMenuPolicy描述的链接已更新: qt5qt4 - avtomaton

6

我不知道你想要实现什么,但是你可以通过调用QWidget::AddAction(QAction*)并设置上下文菜单策略来向任何小部件添加上下文菜单,并添加你想要的操作。

widget->setContextMenuPolicy(Qt::ActionsContextMenu);

小部件将准备并显示上下文菜单,您需要做的就是将 triggered() 信号连接到适当的处理程序。

2

我不知道为什么信号被移除了,但它仍然是一个QWidget,所以您可以始终进行覆盖。

void QWidget::contextMenuEvent ( QContextMenuEvent* );

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

根据您对小部件上下文菜单策略设置的不同,菜单选项可能会有所不同。

3
customContextMenuRequested() 是一个信号,而不是可以重写的函数。 - Harald Scheirich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接