以下内容是参考博客QListView 添加右键菜单_lyblyblyblin的博客-CSDN博客_qlistview右键菜单
相关内容自己做了些整理,代码部分做了下优化与添加
最后实现的效果如下:
源码部分,主要如下:
新建个qt工程文件,拖动个listView控件在界面中,然后在mainwindow.h文件中如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStandardItemModel>
#include <QModelIndex>
#include <QCursor>
#include <QDebug>
#include <QListView>
#include <QStringList>
#include <QStringListModel>
#include <QPoint>
#include <QMenu>
#include <QListWidgetItem>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
#pragma execution_character_set("utf-8")
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void show_Contextmenu1(const QPoint& pos);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
在mainwindow中的.cpp文件中如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStringList num;
//加入设备名称显示在listview中
num<<"device1"<<"device2"<<"device3"<<"device4";
QStringListModel *model=new QStringListModel(num);
ui->listView->setModel(model);
ui->listView->setContextMenuPolicy(Qt::CustomContextMenu);
//右击绑定事件
connect(ui->listView, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(show_Contextmenu1(const QPoint&)));
}
MainWindow::~MainWindow()
{
delete ui;
}
//右击选中,listView中显示"start、stop、delete"
void MainWindow::show_Contextmenu1(const QPoint &pos)
{
QModelIndexList list = ui->listView->selectionModel()->selectedIndexes();
if(!list.empty())
{
QMenu *cmenu = new QMenu(ui->listView);
QAction *start = new QAction(tr("start"), this);
QAction *stop = new QAction(tr("stop"), this);
QAction *delete_step = new QAction(tr("delete"), this);
cmenu->addAction(start);
cmenu->addAction(stop);
cmenu->addAction(delete_step);
cmenu->exec(QCursor::pos());//在当前鼠标位置显示
ui->listView->selectionModel()->clear();
delete cmenu;
delete start;
delete stop;
delete delete_step;
}
}
在main.cpp文件中如下:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
好了,就先分享到这里吧!