CWidget.h
#ifndef CWIDGET_H
#define CWIDGET_H
class CWidget : public QWidget
{
Q_OBJECT
public:
CWidget(QWidget *parent = nullptr);
virtual ~CWidget() {}
};
#endif // CWIDGET_H
CWidget.cpp
#include "CWidget.h"
#include <QLayout>
#include <QListWidget>
#include <QMenu>
#include <QAction>
CWidget::CWidget(QWidget *parent)
: QWidget(parent)
{
resize(400, 400);
// 创建 listWidget
QListWidget* op_lst_widget = new QListWidget(this);
// 可以多选
op_lst_widget->setSelectionMode(QAbstractItemView::ContiguousSelection);
// 自定义菜单:"contextMenuPolicy"不能写错
op_lst_widget->setProperty("contextMenuPolicy", Qt::CustomContextMenu);
// 添加 listWidgetItem
op_lst_widget->addItem("111111111111111111111");
op_lst_widget->addItem("222222222222222222222");
op_lst_widget->addItem("333333333333333333333");
op_lst_widget->addItem("444444444444444444444");
// 创建 menu
QMenu* op_pop_menu = new QMenu(this);
QAction* delete_action = new QAction("Delete", this);
op_pop_menu->addAction(delete_action);
// 关联删除action的信号槽
connect(delete_action, &QAction::triggered, this, [op_lst_widget] ()
{ for (QListWidgetItem* op_item : op_lst_widget->selectedItems()) {
op_lst_widget->removeItemWidget(op_item);
delete op_item;
}});
// 关联listWidget自定义的菜单的信号槽
connect(op_lst_widget, &QListWidget::customContextMenuRequested, this, [op_pop_menu] (const QPoint &)
{ op_pop_menu->exec(QCursor::pos()); });
// 布局
QGridLayout* op_lay = new QGridLayout(this);
op_lay->addWidget(op_lst_widget, 0, 0, 5, 5);
}