QListWidget右键菜单

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);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值