您的位置:首页 > 其它

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: