技术标签: 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();
}
总结:
菜单的创建函数从Ui文件中的widget控件中,右键转到槽函数得来。
项目中的右键菜单效果我用的照片,所以分隔线的效果不是特别明显,四个菜单项需要三条分隔线。
图标素材需要添加到资源库。
文章浏览阅读721次。Linux日志管理(一)1. 日志简介 日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。 在Linux系统中,有三个主要的日志子系统: 连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/_linux获取5分钟日志方法
文章浏览阅读930次。一、下载iReportiReport的最新版本是5.6.0,最后更新时间是2014.5.28,应该已经放弃维护了,但是下载链接依旧有效(笔者亲测,非常慢),地址是:https://community.jaspersoft.com/project/ireport-designer/releases,选择windows安装包。二、安装点击安装包,选择安装路径,安装完毕后,点击快捷方式,..._ireport安装教程
文章浏览阅读1.5k次。{"cells": [{"cell_type": "markdown","metadata": {},"source": ["在这个教程中,你将会学到如何使用python的pandas包对出租车GPS数据进行数据清洗,识别出行OD\n","\n","提供的基础数据是: 数据: \n"," 1.出租车原始GPS数据(在data-sample文件夹下,原始数据集的抽样500辆车的数据)"..._出租车轨迹和速度 python程序 下载
文章浏览阅读1.2k次。UINavigationBar的高度在苹果官方的SDK中是固定的44个点,但是实际项目中我们却有可能遇到这样的情况,如下图:这样的一个UINavigationBar的高度达到了84个点,这就需要我们自定义系统自带的UINavigationBar的高度,但是系统并没有直截了当的方法来调整这个NavigationBar的Height,于是我进行了以下的尝试。在需要进行调整的那个ViewCo_rk framework navigationbarview 高度
文章浏览阅读359次。python毕业设计作品基于django框架 教室实验室预约系统毕设成品(8)毕业设计论文模板_django项目毕设答辩ppt
文章浏览阅读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打开失败原因分析
文章浏览阅读968次。输入两个链表,找出它们的第一个公共结点。如果没有公共节点,则输出NULL;struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};ListNode* FindFirstCommonNode(ListNode *pHead1, ListNode *pH_剑指offer 输入两个链表,找出它们的第一个公共结点。
文章浏览阅读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
文章浏览阅读1.6k次。使用c/c++在windows上扩展python如何在python 中使用 windows dll首先下载 ctypes 模块 说明在 http://starship.python.net/crew/theller/ctypes/reference.html下面是我写的一个例子首先写一个dll,源码如下#include #include //----------_python中的windll
文章浏览阅读874次。规则 1:绝不要信任外部数据或输入关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。例如,下面的数据元素可以被认为是安全的,因为它_php提交数据防注入攻击代码check input
文章浏览阅读521次。Javabase到easyui的知识总结_easyui表单数据三元运算
文章浏览阅读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