ui->tableWidget_gprs->setContextMenuPolicy(Qt::CustomContextMenu); //这个很重要,要在构造函数里面设置完(此部件定义这种菜单)
this->connect(ui->tableWidget_gprs,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(slotShowContextmenu(QPoint))); //信号和槽函数连接
QMenu *RBmenu; QAction *EditAction; QAction *DelAction; QAction *SaveAction;
void GprsHelp::slotShowContextmenu(QPointp) { CreateMenu(); } void GprsHelp::CreateMenu() { RBmenu = new QMenu(ui->tableWidget_gprs); EditAction = RBmenu->addAction("编辑"); DelAction = RBmenu->addAction("删除"); QIcon icon = QIcon(":/save.ico"); //加载图片 SaveAction = RBmenu->addAction(icon,"保存"); connect(EditAction, SIGNAL(triggered(bool)), this, SLOT(sloMenu_Edit())); connect(DelAction, SIGNAL(triggered(bool)), this, SLOT(sloMenu_Del())); connect(SaveAction, SIGNAL(triggered(bool)), this, SLOT(slotMenu_Save())); RBmenu->exec(QCursor::pos());//在当前鼠标位置显示 }
网友资料:
Qt中的部件的弹出菜单(ContextMenu),依据ContextMenuPolicy的值的不同,有四种形式:
一、默认菜单
此时,ContextMenuPolicy的值为Qt::DefaultContextMenu,这是默认值,其将显示部件定义的默认菜单
二、无菜单
此时,ContextMenuPolicy的值为Qt::NoContextMenu
三、由Action定义菜单
此时,ContextMenuPolicy的值为Qt::ActionsContextMenu,要为此部件定义这种菜单,很简单,只要把已经定义好的Action部件插入到要显示此菜单的部件中,部件将自动按顺序显示菜单。
QWidget::addAction(QAction *action);
四、自定义菜单
此时,ContextMenuPolicy的值为Qt::CustomContextMenu,这回,有两种方式来定义菜单,一种是响应
customContextMenuRequested()这个signal,在响应的槽中显示菜单(QMenu的exec()方法)。第二种是需要从这个部件的类中派生一个类,重写contextMenuEvent()这个函数显示菜单(QMenu的exec()方法显示)。