QListView 新增右鍵選單
阿新 • • 發佈:2019-02-19
#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顯示
}
上面程式碼右擊任何地方都會顯示選單,解決方法,增加一個if判斷,和清楚選中選項
//點選空白錯將不錯出現選單
if(!((listview->selectionModel()->selectedIndexes()).empty()))
{
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顯示
//把選中的清楚
listview->selectionModel()->clear();
}