Qt ListItem添加右键菜单

设置菜单策略:

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 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;

你可能感兴趣的:(qt,开发语言)