QT之 给控件添加右键菜单

news/2024/7/7 23:35:23

一、效果预览

在这里插入图片描述

二、代码

cpp文件

//listView右键菜单
void MainWindow::Rightclicklistview()
{


    //初始化一级菜单
    TotalRightclick =new QMenu(this);
    AddDevice = new QMenu(this);
    upDevice = new QAction(this);
    DownDevice = new QAction(this);
    Delete = new QAction(this);
    EditDevice = new QAction(this);

    //初始化二级菜单
    DeviceIS6201A =new QMenu(this);
    DeviceIS6202A = new QMenu(this);
    DeviceIS6203A = new QMenu(this);

    //初始化三级菜单
    DeviceIS6201A_IIC = new QAction(this);
    DeviceIS6201A_PMBV1 = new QAction(this);
    DeviceIS6201A_PMBV2= new QAction(this);

    //各级图标
    //一级图标
    QIcon iconadd = QIcon(":/Res/tools/add.png");  //加载图片
    QIcon iconUp = QIcon(":/Res/tools/moveup.png");  //加载图片
    QIcon iconDown = QIcon(":/Res/tools/movedown.png");  //加载图片
    QIcon iconDelete = QIcon(":/Res/tools/delete.png");  //加载图片
    QIcon iconEdit = QIcon(":/Res/tools/paste.png");  //加载图片
    
    
    //二级图标
    QIcon iconUser = QIcon(":/Res/tools/user.png");  //加载图片
    
    //三级图标
    QIcon iconChip = QIcon(":/Res/tools/xinpian.png");  //加载图片

    //子对象在父对象里面从属关系匹配
    AddDevice  = TotalRightclick->addMenu(iconadd,"  Add Device");
    upDevice = TotalRightclick->addAction(iconUp,"  Move Up Device");
    DownDevice = TotalRightclick->addAction(iconDown,"  Move Down Device");
    Delete = TotalRightclick->addAction(iconDelete,"  Delete Device");
    EditDevice = TotalRightclick->addAction(iconEdit,"  Edit Device");

    DeviceIS6201A = AddDevice->addMenu(iconUser,"  IS6201A");
    DeviceIS6202A = AddDevice->addMenu(iconUser,"  IS6202A");
    DeviceIS6203A = AddDevice->addMenu(iconUser,"  IS6203A");

    DeviceIS6201A_IIC = DeviceIS6201A->addAction(iconChip,  "  IS6201A_IIC");
    DeviceIS6201A_PMBV1 = DeviceIS6201A->addAction(iconChip,"  IS6201A_PMBV1");
    DeviceIS6201A_PMBV2= DeviceIS6201A->addAction(iconChip, "  IS6201A_PMBV2");


      //给动作设置信号槽
      connect( upDevice, &QAction::triggered, [=]()
      {
          qDebug()<<"I'm upDevice";
      });
      connect( DownDevice, &QAction::triggered, [=]()
      {
          qDebug()<<"I'm DownDevice";
      });
      //给动作设置信号槽
      connect( Delete, &QAction::triggered, [=]()
      {
		}


          qDebug()<<"I'm DeleteAction";
      });
      connect( EditDevice, &QAction::triggered, [=]()
      {
          qDebug()<<"I'm btnSecondAction";
      });


  
      connect( DeviceIS6201A_PMBV1, &QAction::triggered, [=]()
      {
 		 qDebug()<<"I'm DeviceIS6201A_PMBV1";
      });

      connect( DeviceIS6201A_PMBV2, &QAction::triggered, [=]()
      {
          qDebug()<<"I'm DeviceIS6201A_PMBV2";
      });



      //绑定控件显示右键菜单给控件设置上下文菜单策略
      ui->listView->setContextMenuPolicy(Qt::CustomContextMenu);
      //鼠标右键点击控件时会发送一个void QWidget::customContextMenuRequested(const QPoint &pos)信号
      //给信号设置相应的槽函数
      connect(ui->listView,&QLabel::customContextMenuRequested,[=](const QPoint &pos)
      {
          qDebug()<<pos;//参数pos用来传递右键点击时的鼠标的坐标,这个坐标一般是相对于控件左上角而言的
          TotalRightclick->exec(QCursor::pos());
      });


}

h文件

private:

    void Rightclicklistview();
    // 声明动作
    QAction * upDevice;
    QAction * DownDevice;
    QAction * Delete;
    QAction * EditDevice;
    QAction * DeviceIS6201A_IIC;
    QAction * DeviceIS6201A_PMBV1;
    QAction * DeviceIS6201A_PMBV2;


    //声明菜单
    QMenu * TotalRightclick;
    QMenu * AddDevice;
    QMenu * DeviceIS6201A;
    QMenu * DeviceIS6202A;
    QMenu * DeviceIS6203A;

文档解释参考一

参考二

参考三


http://lihuaxi.xjx100.cn/news/296561.html

相关文章

Python编程 顺序执行与程序的主入口

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.顺序执行 1.顺序执行(了解) 2.程序主入口(熟悉) 前言 本章将会讲解P…

深入理解算术运算符自加1与自减1

/*深入理解算术运算符""与"--" */ public class Homework01{public static void main(String[] args) {int x 10;int a x x; //因为在变量后&#xff0c;所以是先赋值后自加1&#xff1b;该行代码执行结束&#xff1a;a20&#xff1b;x11System.ou…

成功的项目管理工具拥有的五大功能

如果您决定投资一种新的项目管理工具&#xff0c;那么您需要确保购买的是最适合自己的。在为您的企业寻找最佳项目管理软件时&#xff0c;不要被所有的花里胡哨分心&#xff0c;因为某些东西看起来很漂亮并不意味着它有实质。不要错过对团队成功至关重要的关键功能&#xff0c;…

Java+JSP+MySQL基于SSM的学生宿舍管理系统的设计与实现-计算机毕业设计

项目介绍 随着我国教育制度的改革&#xff0c;各大高校一直在不断的扩招相对应的学生的数量也在不断的增加。在学生数量增加之后学校后勤人员就需要对后勤部分更加精准的进行管理&#xff0c;其中宿舍管理就是后勤管理中比较重要的一个组成部分。如何能够对学生的宿舍信息进行…

美信监控易:网络管理之链路专线管理

专线通常是指运营商为企事业单位提供的专用网络线路&#xff0c;用于满足其业务需求。专线管理可以提供对专线基础信息的维护&#xff0c;以及性能数据的监测能力。通过系统自动地、周期性地执行专线测试&#xff0c;获取指标数据&#xff0c;实现专线连通性、性能数据的全面感…

[附源码]计算机毕业设计springboot农产品销售网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Koa2基础笔记

目录 一、快速入门 二、中间件 链式调用 洋葱圈模型 异步处理 三、路由 koa-router 四、请求参数解析 处理URL参数 处理body参数 五、错误处理 原生的错误处理 使用中间件 一、快速入门 新建文件夹使用VSCode打开&#xff0c;终端运行npm init -y生成package.json…

mysql与磁盘的关系

1.如今一直在说mysql存储方式和磁盘的关系&#xff0c;但是现在都是硬盘存储啊 磁盘分为硬盘和软盘 硬盘结构&#xff08;机械硬盘和固态硬盘&#xff09;详解 硬盘的大小是使用"磁头数 x 柱面数 x 扇区数 x 每个扇区的大小 如下&#xff1a; 每个扇区的大小是固定的…