设置菜单策略:
ui->listWidget_2->setContextMenuPolicy(Qt::CustomContextMenu);
连接信号与槽:
connect(ui->listWidget_2,&QListWidget::customContextMenuRequested,this,&MainWindow::on_PopupRightMenu);
创建菜单指针和动作指针:
QMenu* pMeue = nullptr;
pMeue = new QMenu(this);
QAction* pA1 = new QAction("1",this);
QAction* pA2 = new QAction("2",this);
QAction* pA3 = new QAction("3",this);
QAction* pA4 = new QAction("4",this);
将动作添加进菜单指针:
pMeue->addAction(pA1);
pMeue->addAction(pA2);
pMeue->addAction(pA3);
pMeue->addAction(pA4);
这样还有一个问题就是在空白处右键还是会出现菜单,我们需要的是只在项上点击才出现菜单,所以需要在槽函数中作出判断,当前鼠标点击的是Item:
void MainWindow::on_PopupRightMenu(const QPoint& pos)
{
QListWidgetItem* pItem = ui->listWidget_2->itemAt(pos);
if(!pItem)
return;
pMeue->exec(QCursor::pos());
}
连接动作的信号与槽:
connect(pA1,&QAction::triggered,[=]{
qDebug()<<"1";
});
删除指定名称菜单,如kits:
QList<QListWidgetItem*> list;
list = ui->listWidget_2->findItems("kits",Qt::MatchCaseSensitive);
QListWidgetItem* sel = list[0];
int r = ui->listWidget_2->row(sel);
QListWidgetItem* item = ui->listWidget_2->takeItem(r);
ui->listWidget_2->removeItemWidget(item);
delete item;