1、Qt::NoContextMenu:小部件没有上下文菜单,上下文菜单处理被推迟到小部件的父级。
2、Qt::PreventContextMenu:小部件没有上下文菜单,与NoContextMenu相比,处理不会延迟到小部件的父级。这意味着所有鼠标右键事件都可以传递到小部件本身。
3、Qt::DefaultContextMenu:调用小部件的QWidget::contextMenuEvent()处理程序。
void Widget::contextMenuEvent(QContextMenuEvent *event)
{
QAction * action1 = new QAction(tr("菜单1"),this);
QAction * action2 = new QAction(tr("菜单2"),this);
this->addAction(action1);
this->addAction(action2);
QMenu contextMenu;
contextMenu.addAction(action1);
contextMenu.addAction(action2);
contextMenu.exec(QCursor::pos());
}
4、Qt::ActionsContextMenu:小部件将QWidget::actions()显示为上下文菜单。
this->setContextMenuPolicy(Qt::ActionsContextMenu);
QAction * action1 = new QAction(tr("菜单1"),this);
QAction * action2 = new QAction(tr("菜单2"),this);
this->addAction(action1);
this->addAction(action2);
5、Qt::CustomContextMenu:小部件发出QWidget::customContextMenuRequested()信号。在连接此信号的槽中创建菜单并显示。
this->setContextMenuPolicy(Qt::CustomContextMenu);
connect(this,&Widget::customContextMenuRequested,this, &Widget::slotCustomContextMenu);
void Widget::slotCustomContextMenu(const QPoint &point)
{
QAction * action1 = new QAction(tr("菜单1"),this);
QAction * action2 = new QAction(tr("菜单2"),this);
this->addAction(action1);
this->addAction(action2);
QMenu contextMenu;
contextMenu.addAction(action1);
contextMenu.addAction(action2);
contextMenu.exec(QCursor::pos());
}