QT实现鼠标点击鼠标右键创建菜单(带图标)_qt 右键添加menu-程序员宅基地

技术标签: c++  QT  qt  Powered by 金山文档  前端  开发语言  

最近在开发项目时用到鼠标右键创建菜单的功能,在此做一些记录。

功能描述:QT实现点击鼠标右键创建菜单,菜单带图标,并且可以点击菜单栏选项,出现相应的界面。效果如下图所示:

实现原理:要实现上图效果,我用到QMenu,创建菜单项,将菜单项加入菜单,然后关联菜单项按钮和相应的槽函数。

代码:

1.实现菜单

    QMenu *pMenu = new QMenu(this);    //菜单初始化
    pMenu->setStyleSheet("background-color:#1a1a1a;color:#fff;");    //设置菜单样式背景颜色

    //设置菜单项
    QAction *pSettask = new QAction(tr("任务设置"),this);
    QAction *pEquipdebug = new QAction(tr("设备调试"),this);
    QAction *pCommucontrol = new QAction(tr("通信控制"),this);
    QAction *pClustercontrol = new QAction(tr("集群控制"),this);

    //将菜单项加入菜单
    pMenu->addAction(pSettask);
    pSettask->setIcon(QIcon(":/new/prefix1/icon/205设置.png"));    //设置菜单图标
    pSettask->setIconVisibleInMenu(true);       //图标设置为可见
    pMenu->addSeparator();  //设置菜单项之间的分隔线

    //其余项设置方法相同
    pMenu->addAction(pEquipdebug);
    pEquipdebug->setIcon(QIcon(":/new/prefix1/icon/调试.png"));
    pEquipdebug->setIconVisibleInMenu(true);
    pMenu->addSeparator();
    pMenu->addAction(pCommucontrol);
    pCommucontrol->setIcon(QIcon(":/new/prefix1/icon/通讯录.png"));
    pCommucontrol->setIconVisibleInMenu(true);
    pMenu->addSeparator();
    pMenu->addAction(pClustercontrol);
    pClustercontrol->setIcon(QIcon(":/new/prefix1/icon/集群.png"));
    pClustercontrol->setIconVisibleInMenu(true);

    //菜单项按钮关联槽函数
    console *con = new console;    //初始化要连接到的模块
    connect(pSettask,&QAction::triggered,con,&console::on_stackedWidget_3_currentChanged);
    connect(pEquipdebug,&QAction::triggered,con,&console::on_stackedWidget_3_currentChanged);
    connect(pCommucontrol,&QAction::triggered,con,&console::on_stackedWidget_3_currentChanged);
    connect(pClustercontrol,&QAction::triggered,con,&console::on_stackedWidget_3_currentChanged);

    //在鼠标右键点击的地方显示菜单
    pMenu->exec(cursor().pos());

2.菜单关联的槽函数

void console::on_stackedWidget_3_currentChanged(int arg1)
{
    QAction *pEven = qobject_cast<QAction*>(this->sender());    //获取是由哪个菜单项按钮发出的信号

    if(pEven->text().contains("任务设置"))
    {
        ui->stackedWidget_3->setCurrentWidget(ui->page_5);
    }
    if(pEven->text().contains("设备调试"))
    {
        ui->stackedWidget_3->setCurrentWidget(ui->page_7);
    }
    if(pEven->text().contains("通信控制"))
    {
        ui->stackedWidget_3->setCurrentWidget(ui->page_9);
    }
    else if(pEven->text().contains("集群控制"))
    {
        ui->stackedWidget_3->setCurrentWidget(ui->page_10);
    }
    show();

}

总结:

  1. 菜单的创建函数从Ui文件中的widget控件中,右键转到槽函数得来。

  1. 项目中的右键菜单效果我用的照片,所以分隔线的效果不是特别明显,四个菜单项需要三条分隔线。

  1. 图标素材需要添加到资源库。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_55735677/article/details/128849633

智能推荐

Linux日志管理(一)_linux获取5分钟日志方法-程序员宅基地

文章浏览阅读721次。Linux日志管理(一)1. 日志简介   日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。   在Linux系统中,有三个主要的日志子系统:  连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/_linux获取5分钟日志方法

iReport安装配置简记_ireport安装教程-程序员宅基地

文章浏览阅读930次。一、下载iReportiReport的最新版本是5.6.0,最后更新时间是2014.5.28,应该已经放弃维护了,但是下载链接依旧有效(笔者亲测,非常慢),地址是:https://community.jaspersoft.com/project/ireport-designer/releases,选择windows安装包。二、安装点击安装包,选择安装路径,安装完毕后,点击快捷方式,..._ireport安装教程

python处理出租车轨迹数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb...-程序员宅基地

文章浏览阅读1.5k次。{"cells": [{"cell_type": "markdown","metadata": {},"source": ["在这个教程中,你将会学到如何使用python的pandas包对出租车GPS数据进行数据清洗,识别出行OD\n","\n","提供的基础数据是: 数据: \n"," 1.出租车原始GPS数据(在data-sample文件夹下,原始数据集的抽样500辆车的数据)"..._出租车轨迹和速度 python程序 下载

如何自定义NavigationBar的高度_rk framework navigationbarview 高度-程序员宅基地

文章浏览阅读1.2k次。UINavigationBar的高度在苹果官方的SDK中是固定的44个点,但是实际项目中我们却有可能遇到这样的情况,如下图:这样的一个UINavigationBar的高度达到了84个点,这就需要我们自定义系统自带的UINavigationBar的高度,但是系统并没有直截了当的方法来调整这个NavigationBar的Height,于是我进行了以下的尝试。在需要进行调整的那个ViewCo_rk framework navigationbarview 高度

python毕业设计作品基于django框架 教室实验室预约系统毕设成品(8)毕业设计论文模板_django项目毕设答辩ppt-程序员宅基地

文章浏览阅读359次。python毕业设计作品基于django框架 教室实验室预约系统毕设成品(8)毕业设计论文模板_django项目毕设答辩ppt

android wifi源码分析,android wifi打开过程源码解析及Wifi打开失败原因分析-程序员宅基地

文章浏览阅读464次。在android中wifi打开的状态从DISABLED-->ENABLING-->ENABLED1 WifiSettings.java--wifi界面wifi开关wifi开关定义在SettingsActivity.java中,传入WifiEnabler.java,并在WifiEnabler.java中响应。private SwitchBar mSwitchBar;public Swit..._android wifi打开过程源码解析及wifi打开失败原因分析

随便推点

剑指offer:两个链表的第一个公共结点输入两个链表,找出它们的第一个公共结点。_剑指offer 输入两个链表,找出它们的第一个公共结点。-程序员宅基地

文章浏览阅读968次。输入两个链表,找出它们的第一个公共结点。如果没有公共节点,则输出NULL;struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};ListNode* FindFirstCommonNode(ListNode *pHead1, ListNode *pH_剑指offer 输入两个链表,找出它们的第一个公共结点。

矩阵快速幂优化dp-程序员宅基地

文章浏览阅读520次,点赞3次,收藏4次。文章目录构造矩阵快速幂优化线性递推式POJ3734[Buses Gym - 101473H](https://vjudge.net/problem/Gym-101473H)[CF222E Decoding Genome](https://codeforces.com/problemset/problem/222/E)构造矩阵快速幂优化线性递推式遇到某些线性递推式,我们可以设法构造成矩阵乘积的形式,像斐波那契数列 f[i]=f[i-1]+f[i-2] ,写成矩阵乘积的好处就是,由于矩阵乘积具有结合_矩阵快速幂优化dp

在python 中使用 windows dll_python中的windll-程序员宅基地

文章浏览阅读1.6k次。使用c/c++在windows上扩展python如何在python 中使用 windows dll首先下载 ctypes 模块 说明在 http://starship.python.net/crew/theller/ctypes/reference.html下面是我写的一个例子首先写一个dll,源码如下#include #include //----------_python中的windll

【代码】php过滤提交数据 防止sql注入攻击_php提交数据防注入攻击代码check input-程序员宅基地

文章浏览阅读874次。规则 1:绝不要信任外部数据或输入关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。例如,下面的数据元素可以被认为是安全的,因为它_php提交数据防注入攻击代码check input

Javabase到easyui的知识总结_easyui表单数据三元运算-程序员宅基地

文章浏览阅读521次。Javabase到easyui的知识总结_easyui表单数据三元运算

队列的实现——C语言_#define queuedatalen(x) s_queuedatalen((unsigned c-程序员宅基地

文章浏览阅读175次。// C语言,队列的实现#include<stdio.h>#include<stdlib.h>#define QUEUE_SIZE (50) // 设置队列的大小typedef struct SeqQueue{ int data[QUEUE_SIZE]; // 队列元素 int front; // 队列的头 int rear; // 队列的尾 int count; // 队列当前的元素个数}Queue;Queue *InitQueue(){ ._#define queuedatalen(x) s_queuedatalen((unsigned char**)&(x).head,(unsigned

推荐文章

热门文章

相关标签