方法:重写QWidget提供的方法contextMenuEvent(QContextMenuEvent *event)







样例:

MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
setWindowTitle(tr("Context Menu Show 2"));
setContextMenuPolicy(Qt::DefaultContextMenu); //其实不用设置,默认就是这个值
}

void MyWidget::contextMenuEvent(QContextMenuEvent *event)
{
QMenu *menu = new QMenu(this);
menu->addAction(new QAction(tr("&Open"), menu));
menu->addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), menu));
menu->addAction(new QAction(tr("&Quit"), menu));
menu->move(cursor().pos()); //让菜单显示的位置在鼠标的坐标上
menu->show();
}



拓展:判断焦点位置,设置右键菜单的显示位置。

void Demo::contextMenuEvent(QContextMenuEvent *)
{
if(m_TableWidget->hasFocus())
{
m_Menu->move(cursor().pos());
m_Menu->show();
}
}