0 0 0

Qt ListWidget增加右键菜单

大理寺少卿
156 0

本文共计1389个字,预计阅读时长5.6分钟。

为了增加菜单,我们首先需要在程序全局增加QAction其中每一个QAction则代表一个菜单选项指针。

// 全局下设置增加菜单
QAction *NewAction;
QAction *InsertAction;
QAction *DeleteAction;

其次则是通过代码的方式在程序中动态创建一个基础的右键菜单,并对该菜单设置子菜单以及所对应的图标组,最后就是将信号连接到指定的全局菜单指针上即可,这个代码实现如下。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QToolBar>
#include <iostream>

// 全局下设置增加菜单
QAction *NewAction;
QAction *InsertAction;
QAction *DeleteAction;

// By: LyShark
// https://www.cnblogs.com/lyshark
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
   ui->setupUi(this);

   // 使用 customContextMenuRequested 信号则需要设置
   ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);

   // 隐藏菜单栏上的右击菜单
   this->setContextMenuPolicy(Qt::NoContextMenu);

   // 创建基础顶部菜单
   QMenuBar *bar = menuBar();
   this->setMenuBar(bar);
   QMenu * fileMenu = bar->addMenu("菜单1");
   bar->setVisible(false);   // 隐藏顶部菜单栏

   // 添加子菜单
    NewAction = fileMenu->addAction("增加IP地址");
    InsertAction = fileMenu->addAction("插入IP地址");
    DeleteAction = fileMenu->addAction("删除IP地址");

   // 分别设置图标
   NewAction->setIcon(QIcon(":/image/1.ico"));
   InsertAction->setIcon(QIcon(":/image/2.ico"));
   DeleteAction->setIcon(QIcon(":/image/3.ico"));

   // 绑定槽函数
   connect(NewAction,&QAction::triggered,this,[=](){
       std::cout <<"new action" <

ListWidget同样支持一图标方式显示列表框内的元素,只需要设置setViewMode(QListView::IconMode)属性即可实现图标显示,我们按照如上代码简单改进即可,代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QToolBar>
#include <iostream>

// 全局下设置增加删除菜单
QAction *NewAction;
QAction *InsertAction;
QAction *DeleteAction;

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
   ui->setupUi(this);

   // 使用 customContextMenuRequested 信号则需要设置
   ui->listWidget_2->setContextMenuPolicy(Qt::CustomContextMenu);

   // 隐藏菜单栏上的右击菜单
   this->setContextMenuPolicy(Qt::NoContextMenu);

   // 创建基础顶部菜单
   QMenuBar *bar = menuBar();
   this->setMenuBar(bar);
   QMenu * fileMenu = bar->addMenu("菜单1");
   bar->setVisible(false);   // 隐藏顶部菜单栏

   // 添加子菜单
    NewAction = fileMenu->addAction("增加IP地址");
    InsertAction = fileMenu->addAction("插入IP地址");
    DeleteAction = fileMenu->addAction("删除IP地址");

   // 分别设置图标
   NewAction->setIcon(QIcon(":/image/1.ico"));
   InsertAction->setIcon(QIcon(":/image/2.ico"));
   DeleteAction->setIcon(QIcon(":/image/3.ico"));

   // 绑定槽函数
   connect(NewAction,&QAction::triggered,this,[=](){
       std::cout <<"new action" <


最新回复 ( 0 )
全部楼主