函数
所有派生自QWidget的控件,若实现在其上右键单击弹出菜单,需要设置该控件的上下文菜单策略函数为setContextMenuPolicy(Qt::CustomContextMenu),设置该策略后当用户右键点击控件时qt会发送一个信号customContextMenuRequested() ,给这个信号设置相应的槽函数,在槽函数中将菜单展示出来就行了。
涉及相关函数其原型如下:
- void QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy)
- void QWidget::customContextMenuRequested(const QPoint & pos)
释义
- 若要让控件支持右键菜单,必须设置此函数。参数中枚举类型ContextMenuPolicy用来设置与显示菜单相关的策略,其中枚举项ContextMenuPolicy::CustomContextMenu表示右键点击控件时qt会发出一个信号,该信号为customContextMenuRequested() 。
- 是一个信号函数,在右键点击控件时由qt自动发出。注意必须设置策略为setContextMenuPolicy(Qt::CustomContextMenu)才行。
示例
对需要支持右键弹出菜单的控件做如下设置:
setContextMenuPolicy(Qt::CustomContextMenu);
connect(this, &ProjectTreeView::customContextMenuRequested, this, &ProjectTreeView::open_menu);
open_menu即为自定义小部件类ProjectTreeView中创建的槽函数,该槽函数的实现为:
#include "QMenu"
void ProjectTreeView::open_menu(const QPoint & pos)
{
QMenu menu;
menu.addAction("aaa");
menu.addAction("bbb");
menu.addAction("ccc");
menu.exec(QCursor::pos());//以阻塞方式显示菜单,参数可指示菜单显示位置,另外该函数可返回单击选中项
}
运行后,在小部件上右键单击后截图为: