Qt QListWidget右键弹出删除菜单

在QListWidget上右击鼠标弹出删除菜单

第一步,创建一个包含两条数据的QListWidget

1     /*初始化一个包含两个Action(Delete和ClearAll)的菜单*/
2     popMenu_In_ListWidget_ = new QMenu(this);
3     action_Delete_In_ListWidget_ = new QAction(tr("Delete"), this);
4     action_Clear_In_ListWidget_ = new QAction(tr("ClearAll"), this);
5     popMenu_In_ListWidget_->addAction(action_Delete_In_ListWidget_);
6     popMenu_In_ListWidget_->addAction(action_Clear_In_ListWidget_);

在这里插入图片描述

第二步,设置QListWidget的contextMenuPolicy属性,不然不能显示右键菜单

1     /*重要:设置QListWidget的contextMenuPolicy属性,不然不能显示右键菜单*/
2     list_widget->setProperty("contextMenuPolicy", Qt::CustomContextMenu);

第二步,创建一个包含QAction的QMenu菜单

 

1     /*初始化一个包含两个Action(Delete和ClearAll)的菜单*/
2     popMenu_In_ListWidget_ = new QMenu(this);
3     action_Delete_In_ListWidget_ = new QAction(tr("Delete"), this);
4     action_Clear_In_ListWidget_ = new QAction(tr("ClearAll"), this);
5     popMenu_In_ListWidget_->addAction(action_Delete_In_ListWidget_);
6     popMenu_In_ListWidget_->addAction(action_Clear_In_ListWidget_);

在这里插入图片描述 

第三步,为菜单的上的QAction添加响应函数

 1 //事件处理函数
 2 void Dialog::onActionDelete()
 3 {
 4     /*获取当前选中的Item*/
 5     QList<QListWidgetItem*> items = this->list_widget->selectedItems();
 6 
 7     if (items.count() > 0)
 8     {
 9         /*弹出询问对话框*/
10         if (QMessageBox::Yes == QMessageBox::question(this, QStringLiteral("Remove Item"),
11             QStringLiteral("Remove %1 item").arg(QString::number(items.count())), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes))
12         {
13             foreach(QListWidgetItem* var, items) {
14                 this->list_widget->removeItemWidget(var);
15                 items.removeOne(var);
16                 delete var;
17             }
18         }
19     }
20 }
1 //绑定处理函数
2 /*为菜单上的Delete选项添加响应函数*/
3 connect(this->action_Delete_In_ListWidget_, SIGNAL(triggered()), this, SLOT(onActionDelete()));

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

第四步,为QListWidget添加右键弹出菜单函数

1 //事件处理函数
2 void Dialog::onCustomContextMenuRequested(const QPoint &pos)
3 {
4     /*弹出右键菜单*/
5     popMenu_In_ListWidget_->exec(QCursor::pos());
6 }
1 //绑定处理函数
2 /*绑定右键显示菜单:在单击右键之后会执行槽函数, 槽函数中负责弹出右键菜单*/
3 connect(this->list_widget, SIGNAL(customContextMenuRequested(const QPoint &)),
4     this, SLOT(onCustomContextMenuRequested(const QPoint &)));

CSDN QT大纲:Qt开发必备技术栈学习路线和资料

效果

鼠标右键点击,弹出菜单

在这里插入图片描述


点击Delete弹出是否删除对话框 

代码示例

main_dialog.h

 1 #include <QDialog>
 2 
 3 class QMenu;
 4 class QListWidget;
 5 
 6 class Dialog : public QDialog
 7 {
 8     Q_OBJECT
 9 
10 public:
11     Dialog(QWidget* parent = NULL);
12     ~Dialog();
13 
14     private slots:
15 
16     /*处理鼠标右键事件,弹出菜单*/
17     void onCustomContextMenuRequested(const QPoint &pos);
18 
19     /*处理弹出菜单上的Delete事件*/
20     void onActionDelete();
21 
22 private:
23 
24     QMenu *popMenu_In_ListWidget_;/*弹出菜单*/
25     QAction *action_Delete_In_ListWidget_;/*菜单上的Action*/
26     QAction *action_Clear_In_ListWidget_;/*菜单上的Action*/
27     QListWidget *list_widget;/*列表*/
28 
29 };

main.cpp

 1 #include <QtWidgets/QApplication>
 2 #include <QListWidget>
 3 #include <QMenu>
 4 #include <QMessageBox>
 5 
 6 #include "main_dialog.h"
 7 
 8 Dialog::Dialog(QWidget *parent) :QDialog(parent)
 9 {   
10     /*设置对话框大小*/
11     this->setFixedSize(500, 400);
12 
13     /*在对话框上添加一个QListWidget控件*/
14     list_widget = new QListWidget(this);
15     list_widget->setSelectionMode(QAbstractItemView::ContiguousSelection);/*设置可以多选*/
16 
17     /*在QListWidget控件上添加两个Item*/
18     list_widget->addItem("this is 1th item");
19     list_widget->addItem("this is 2th item");
20 
21     /*重要:设置QListWidget的contextMenuPolicy属性,不然不能显示右键菜单*/
22     list_widget->setProperty("contextMenuPolicy", Qt::CustomContextMenu);
23 
24     /*初始化一个包含两个Action(Delete和ClearAll)的菜单*/
25     popMenu_In_ListWidget_ = new QMenu(this);
26     action_Delete_In_ListWidget_ = new QAction(tr("Delete"), this);
27     action_Clear_In_ListWidget_ = new QAction(tr("ClearAll"), this);
28     popMenu_In_ListWidget_->addAction(action_Delete_In_ListWidget_);
29     popMenu_In_ListWidget_->addAction(action_Clear_In_ListWidget_);
30 
31     /*为菜单上的Delete选项添加响应函数*/
32     connect(this->action_Delete_In_ListWidget_, SIGNAL(triggered()), this, SLOT(onActionDelete()));
33 
34     /*绑定右键显示菜单:在单击右键之后会执行槽函数, 槽函数中负责弹出右键菜单*/
35     connect(this->list_widget, SIGNAL(customContextMenuRequested(const QPoint &)),
36         this, SLOT(onCustomContextMenuRequested(const QPoint &)));
37 
38 }
39 Dialog::~Dialog()
40 {
41 
42 }
43 
44 void Dialog::onCustomContextMenuRequested(const QPoint &pos)
45 {
46     /*弹出右键菜单*/
47     popMenu_In_ListWidget_->exec(QCursor::pos());
48 }
49 
50 void Dialog::onActionDelete()
51 {
52     /*获取当前选中的Item*/
53     QList<QListWidgetItem*> items = this->list_widget->selectedItems();
54 
55     if (items.count() > 0)
56     {
57         /*弹出询问对话框*/
58         if (QMessageBox::Yes == QMessageBox::question(this, QStringLiteral("Remove Item"),
59             QStringLiteral("Remove %1 item").arg(QString::number(items.count())), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes))
60         {
61             foreach(QListWidgetItem* var, items) {
62                 this->list_widget->removeItemWidget(var);
63                 items.removeOne(var);
64                 delete var;
65             }
66         }
67     }
68 }
69 
70 int main(int argc, char *argv[])
71 {
72     QApplication app(argc, argv);
73     Dialog dia;
74     dia.show();
75     return app.exec();
76 }

CMakeLists

 1 cmake_minimum_required (VERSION 2.6 FATAL_ERROR)
 2 
 3 project(QListWidget_Menu)
 4 find_package (Qt5 REQUIRED Core Widgets)
 5 
 6 set  (QT_UI_HEADERS main_dialog.h)
 7 QT5_WRAP_CPP (project_HEADERS_MOC  ${QT_UI_HEADERS})
 8 
 9 file(GLOB Demo_Src ./*.cpp)
10 set  (project_SOURCES ${Demo_Src})
11 
12 file(GLOB Demo_Header ./*.h)
13 set  (INCLUDE_FILE ${Demo_Header} )
14 
15 set  (project_HEADERS ${INCLUDE_FILE} ${QT_UI_HEADERS})
16 
17 ADD_DEFINITIONS (${QT_DEFINITIONS})
18 ADD_DEFINITIONS(-D _XKEYCHECK_H)
19 ADD_EXECUTABLE  (Demo ${project_SOURCES} ${project_HEADERS_MOC} ${project_HEADERS})
20 
21 set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT Demo)
22 
23 TARGET_LINK_LIBRARIES (Demo Qt5::Core Qt5::Widgets)

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值