此文以设置QListWidget的自定义菜单为例,其他继承于QWidget的类也都可以按类似的方法去实现。
1、ui文件设置contextMenuPolicy属性为CustomContextMenu

2、添加槽函数
    /**
     * @brief onCustomContextMenuRequested 右键弹出菜单
     * @param pos 右键的坐标
     */
    void onCustomContextMenuRequested(const QPoint &pos);
    
    /**
     * @brief onDeleteMediaFolderTriggered 删除选中配置
     */
    void onDeleteMediaFolderTriggered();
    
void Xxxx::onCustomContextMenuRequested(const QPoint &pos)
{
    QListWidgetItem *item = ui->listWidget->itemAt(pos);
    if (item != NULL)
    {
        QMenu menu(this);
        QAction actionDelete("删除", this);
        connect(&actionDelete, &QAction::triggered, this, &Xxxx::onDeleteMediaFolderTriggered);
        menu.addAction(&actionDelete);
        // 可以添加更多的菜单选项
        //QAction actionXxxx("xxxx", this);
        //connect(&actionXxxx, &QAction::triggered, this, &Xxxx::onXxxxMediaFolderTriggered);
        //menu.addAction(&actionXxxx);
        menu.exec(QCursor::pos());
    }
}
void Xxxx::onDeleteMediaFolderTriggered()
{
    int row = ui->listWidget->currentRow();
    if (row < 0 || row > ui->listWidget->count())
    {
        return;
    }
    QListWidgetItem *item = ui->listWidget->takeItem(row);
    if (item != NULL)
    {
        delete item;
        item = NULL;
    }
}
 
3、连接信号槽
connect(ui->listWidget, &QListWidget::customContextMenuRequested, this, &Xxxx::onCustomContextMenuRequested); 
打完收工!


















