QT控件之(ListView)中右击添加菜单栏的功能

以下内容是参考博客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();
}

好了,就先分享到这里吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值