一、右键菜单

右键菜单实现:通过重写contextMenuEvent(QContextMenuEvent *event)事件,QMenu+QAction即可完美实现!

重写voidcontextMenuEvent(QContextMenuEvent*event)事件

void Form::contextMenuEvent(QContextMenuEvent *event)
{
//创建菜单、菜单项
QMenu *pop_menu = new QMenu();
QAction *add_images_action = new QAction(this);
QAction *add_folder_action = new QAction(this);
QAction *remove_selected_action = new QAction(this);
QAction *remove_all_action = new QAction(this);
add_images_action->setText(tr("add images"));
add_folder_action->setText(tr("add folder"));
remove_selected_action->setText(tr("remove selected images"));
remove_all_action->setText(tr("remove all images"));
//清除原有菜单
pop_menu->addAction(add_images_action);
pop_menu->addAction(add_folder_action);
pop_menu->addAction(remove_selected_action);
pop_menu->addAction(remove_all_action);
//菜单出现的位置为当前鼠标的位置
pop_menu->exec(QCursor::pos());
}

二、按钮菜单

使用QPushButton(QToolButton)+QMenu+QAction即可完美实现!

界面拖入一个pushButton按钮;代码实现

   QMenu *remove_menu = new QMenu();
QAction *remove_selected_action = new QAction(remove_menu);
QAction *remove_all_action = new QAction(remove_menu);
remove_menu->addAction(remove_selected_action);
remove_menu->addAction(remove_all_action);
ui->pushButton->setMenu(remove_menu);
ui->pushButton->setText(tr("remove"));
remove_selected_action->setText(tr("remove selected watermarks"));
remove_all_action->setText(tr("remove all watermarks"));

三、托盘菜单

托盘菜单实现:通过QSystemTrayIcon+QMenu+QAction实现;

    QSystemTrayIcon *system_tray = new QSystemTrayIcon();
//放在托盘提示信息、托盘图标
system_tray ->setToolTip(QString("我就是托盘"));
system_tray ->setIcon(QIcon(":/sx1.png"));
//TrayMenu *tray_menu = new TrayMenu();
QMenu *remove_menu = new QMenu();
QAction *remove_selected_action = new QAction(remove_menu);
QAction *remove_all_action = new QAction(remove_menu);
remove_menu->addAction(remove_selected_action);
remove_menu->addAction(remove_all_action);
remove_selected_action->setText(tr("remove selected watermarks"));
remove_all_action->setText(tr("remove all watermarks"));
system_tray->setContextMenu(remove_menu); //点击托盘执行的事件
connect(system_tray , SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));
connect(remove_menu, SIGNAL(showWidget()), this, SLOT(showNormal()));
//显示托盘
system_tray->show();
//托盘显示提示信息
system_tray->showMessage(QString("托盘标题"), QString("托盘显示内容"));

注:关闭和最小化进入到托盘代码

void Form::closeEvent(QCloseEvent *e)
{
this->hide();
e->ignore();
}
void Form::changeEvent(QEvent *e)
{
if((e->type()==QEvent::WindowStateChange)&&this->isMinimized())
{
this->hide();
e->ignore();
}
}

Qt_自定义菜单的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单

    系列目录 引言 1.如果不借用Senparc.Weixin SDK自定义菜单,编码起来,工作量是非常之大 2.但是借助SDK似乎一切都是简单得不要不要的 3.自定义菜单无需要建立数据库表 4.自定义菜 ...

  2. 用c#开发微信(5)自定义菜单设置工具 (在线创建)

    读目录 1 使用 2 原理 3. 错误 上次写了<用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)>,有园友问到如何创建菜单的问题,今天就介绍下 ...

  3. 《C#微信开发系列(2)-自定义菜单管理》

    2.0自定义菜单管理 ①接口说明 微信服务号聊天窗口下面的菜单项(有的公众号有启用有的则没有),这个可以在编辑模式简单配置,也可以在开发模式代码配置.微信公众平台开发者文档:微信公众号开发平台创建自定 ...

  4. 微信公众平台自定义菜单新增扫一扫、发图片、发位置 LBS运作更便捷

    今天微信公众平台发布更新,自定义菜单新增扫一扫.发图片.发送位置等功能,这对于有意挖掘微信LBS服务的运营者来说更便捷了,订阅号不用返回微信界面就能扫图.发送图片.调用地理位置,用户体验更友好,自然也 ...

  5. C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  6. 微信公众平台创建自定义菜单中文编码导致system error

    创建包含了中文的自定义菜单时总是返回{"errcode":-1,"errmsg":"system error"},要将编码方式设置为UTF- ...

  7. 使用knockout-sortable实现对自定义菜单的拖拽排序

    在开始之前,照例,我们先看效果和功能实现. 关于自定义菜单的实现,这里就不多说了,需要了解的请访问:http://www.cnblogs.com/codelove/p/4838766.html 这里需 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  9. django xadmin自定义菜单

    1. 自定义菜单 adminx.py class GlobalSetting(object): site_title = u'xxx后台' def kuF_site_menu(self): retur ...

随机推荐

  1. MVC ---- 去掉HTML过滤

    在方法头上添加特效  [ValidateInput(false)]  富文本框提交的内容就可以顺利提交到后台了.

  2. 【Java】【绘图】

    绘图原理(1)Component类提供了两个和绘图相关最重要的⽅法:1. paint(Graphics g)绘制组件的外观2. repaint()刷新组件的外观当组件第⼀次在屏幕显示的时候,程序会⾃动 ...

  3. 关于在pycharm下提示ModuleNotFoundError: No module named 'XXX' 的一种可能

    在pycharm下出现“ModuleNotFoundError: No module named 'XXX' ”提示时, 在网上找大部分的解决方案是重新在pycharm里安装对应的模块,但是这不是我要 ...

  4. 从classloader的变更说起

    classloader从1.6到1.7整体分成了两个版本.重点区别就是并行类加载. 1.6版本 protected synchronized Class loadClass(String name, ...

  5. 力扣(LeetCode)476. 数字的补数

    给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含前导零位. 示例 1: 输入: 5 输出: 2 解释: 5的二 ...

  6. leecode第五十九题(螺旋矩阵 II)

    class Solution { public: vector<vector<int>> generateMatrix(int n) { )//特殊情况 { vector< ...

  7. DOCTYPE的作用以及标准模式和兼容模式的区别

    <!doctype>声明必须处于HTML文档的头部,在<html>标签之前,告知浏览器的解析器用什么文档标准解析这个文档.DOCTYPE不存在或格式不正确会导致文档以兼容模式呈 ...

  8. windows设置程序开机自启动

    在msconfig里面进行设置的前提是,这个程序已经在自启动列表中,只是没有被勾选上, 对于不在该启动列表里的程序需要: ①找到这个应用程序所在的位置; ②右击发送到桌面快捷方式;  ③在Window ...

  9. mt19937 -- 高质量随机数

    优点:产生速度快, 周期大 用法: #include<bits/stdc++.h> using namespace std; int main() { mt19937 mt_rand(ti ...

  10. Python PyQt5 Pycharm 环境搭建及配置

    PyQt5相关安装 python 版本 python 3.6.3  1.安装PyQt5 执行命令: pip install pyqt5 2.安装PyQt5-tools 执行命令:pip install ...