QListview鼠标右键点击item弹出菜单
2018-04-04 09:50
405 查看
#include "widget.h" #include "ui_widget.h" #include <QCursor> #include <QDebug> #include <QListView> #include <QStringList> #include <QStringListModel> #include <QPoint> #include <QMenu> #include <QListWidgetItem> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); listview =new QListView(this); QStringList num; num<<"1"<<"2"<<"3"<<"4"; QStringListModel *model=new QStringListModel(num); listview->setModel(model); listview->setContextMenuPolicy(Qt::CustomContextMenu); connect(listview, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(show_contextmenu1(const QPoint&))); //删除测试 //全部删除 //model->removeRows(0,model->rowCount()); //删除第几个,一共删除多少个 //model->removeRows(0,3); } Widget::~Widget() { delete ui; } void Widget::show_contextmenu1(const QPoint& pos) { // if(cmenu)//保证同时只存在一个menu,及时释放内存 // { // delete cmenu; // cmenu = NULL; // } qDebug()<<"show_contextmenu1"; QMenu *cmenu = new QMenu(listview); QAction *ascendSortAction = cmenu->addAction("升序"); QAction *descendSortAction = cmenu->addAction("降序"); QAction *filterAction = cmenu->addAction("过滤"); QAction *reshowAction = cmenu->addAction("重载"); connect(ascendSortAction, SIGNAL(triggered(bool)), this, SLOT(edit_menu1())); connect(descendSortAction, SIGNAL(triggered(bool)), this, SLOT(edit_menu2())); connect(filterAction, SIGNAL(triggered(bool)), this, SLOT(edit_menu3())); connect(reshowAction, SIGNAL(triggered(bool)), this, SLOT(edit_menu4())); cmenu->exec(QCursor::pos());//在当前鼠标位置显示 //cmenu->exec(pos)是在viewport显示 }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
上面代码右击任何地方都会显示菜单,解决方法,增加一个if判断,和清楚选中选项
//点击空白错将不错出现菜单 if(!((listview->selectionModel()->selectedIndexes()).empty())) { qDebug()<<"show_contextmenu1"; QMenu *cmenu = new QMenu(listview); QAction *ascendSortAction = cmenu->addAction("升序"); QActi 4000 on *descendSortAction = cmenu->addAction("降序"); QAction *filterAction = cmenu->addAction("过滤"); QAction *reshowAction = cmenu->addAction("重载"); connect(ascendSortAction, SIGNAL(triggered(bool)), this, SLOT(edit_menu1())); connect(descendSortAction, SIGNAL(triggered(bool)), this, SLOT(edit_menu2())); connect(filterAction, SIGNAL(triggered(bool)), this, SLOT(edit_menu3())); connect(reshowAction, SIGNAL(triggered(bool)), this, SLOT(edit_menu4())); cmenu->exec(QCursor::pos());//在当前鼠标位置显示 //cmenu->exec(pos)是在viewport显示 //把选中的清楚 listview->selectionModel()->clear(); }
相关文章推荐
- ArcGIS API for Silverlight开发中鼠标左键点击地图上的点弹出窗口及右键点击弹出快捷菜单的实现代码
- JTable中点击鼠标右键弹出菜单
- VMWARE中虚拟工具VMTOOLS的安装 安装 vmtools之前,需要先打开虚拟机,并且启动其中的操作系统。 注意看下图中鼠标的位置。请将鼠标移动到相应位置上点击右键。 在弹出的菜单最下端点击“
- 在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件
- 在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件
- 给JList中的Item添加右键点击弹出菜单事件
- Jquery鼠标右键点击弹出菜单
- C#用鼠标钩子屏蔽任务栏右键弹出菜单
- .NET 点击右键弹出菜单怎么做
- Windows7点击桌面右键没有反应无菜单弹出
- Winform鼠标左键点击按钮弹出设置菜单
- 在网上转的一个鼠标右键弹出菜单,挺好的,兼容性不知道。。。
- 鼠标右键弹出菜单 上传图片自定义控件 弹出菜单(PopUp 控件)
- 用javascript 实现网页鼠标右键弹出菜单功能
- 屏蔽CDockablePane右击鼠标触发事件弹出右键菜单
- 如何设置secureCRT的鼠标右键为弹出文本操作菜单功能
- MFC之右键点击listctrl控件弹出菜单
- FLEX里鼠标右键弹出菜单,
- VC鼠标右键弹出菜单的实现(转)
- JTable上点击右键并弹出菜单的实现