Qt项目天气预报(2) - 重写事件函数

 鼠标右键实现退出界面

知识点QMenu:


  QMenu 弹出对话框 --> 相对QMessageBox 更加轻量点 

QMenu是Qt库中用于创建弹出式菜单的类,它通常出现在应用程序的顶部菜单栏、按钮的右键菜单或自定义上下文菜单中。以下是关于QMenu的详细介绍:

1. 类的基本特性

  • 继承关系:QMenu类继承自QWidget,提供了一个菜单样式的小部件。
  • 使用场景:通常用于创建弹出式菜单、上下文菜单和子菜单。
  • 包含项:QMenu可以包含各种类型的菜单项,如普通菜单项、复选框菜单项、分隔符等。

2. 主要功能

  • 添加菜单项
    • addAction(QAction *): 添加一个QAction对象到菜单中。
    • addMenu(QMenu *): 添加一个子菜单到当前菜单。
    • addSeparator(): 在菜单中添加一个分隔线,用于区分不同的菜单项组。
  • 事件处理
    • 通过关联槽函数到triggered(QAction *)信号,可以在用户选择菜单项时执行相应操作。
  • 显示菜单
    • exec(QPoint globalPos): 弹出菜单并等待用户选择一个项,然后返回被选中项的QAction对象指针。
    • popup(QPoint pos): 直接在指定的位置弹出菜单,不阻塞程序执行。

3. 示例代码

QMenu* menu = new QMenu(tr("File"), this); // 创建一个名为 "File" 的菜单  
QAction* actionOpen = new QAction(tr("&Open"), this); // 创建一个名为 "Open" 的菜单项  
menu->addAction(actionOpen); // 将 "Open" 菜单项添加到 "File" 菜单中  
// ... 其他代码 ...  
menu->popup(mapToGlobal(pos)); // 在指定位置弹出菜单

4. 获取QMenu实例

在Qt中,可以通过以下方式创建QMenu实例:

QMenu *menu = new QMenu(this); // this 表示当前上下文,通常是某个窗口或控件

5. 与QMenuBar的关系

  • QMenuBar是一个用于创建菜单栏的小部件,通常位于应用程序的顶部。
  • QMenuBar可以包含多个QMenu,每个QMenu可以包含多个菜单项。


 实例化QMenu对象

构造函数

    menuQuit = new QMenu(this);//创建行为对象 -- 当调用这种行为打的时候弹出close.png这张图片, 指向这个图片的时候显示"退出"字样QAction *closeAct = new QAction(QIcon(":/close.png"), tr("退出"), this);menuQuit->addAction(closeAct); //为menu添加退出行为// 为menu绑定信号与槽connect(menuQuit,&QMenu::triggered,this,[=](){this->close();});


重写事件鼠标右键函数

void Widget::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::RightButton){qDebug()<<"右键";menuQuit->exec(QCursor::pos()); // 弹出位置为鼠标当前的位置}
}

效果演示

演示步骤

当对着页面任意位置点击右键的时候

就会弹出这张close.png 图片

当鼠标指上去的时候,就出出现"退出"字样

点击这个弹出窗口就会关闭这个窗口

重写鼠标事件实现拖动窗口

设计思路

先看下图

三个位置://鼠标当前位置: event->globalPos()//窗口当前位置:this->pos()//新窗口位置://1.当鼠标左键被按下的时候记录鼠标/窗口当前值,还有鼠标与窗口的相对值 
event->pos() -- 鼠标相对窗口的坐标 或者
event->globalPos()-this->pos() - 作差求相对坐标
  //2.鼠标左键释放的时候获得鼠标当前值,对应的窗口位置也根据相对距离进行偏移
 

重写鼠标按下事件

void Widget::mousePressEvent(QMouseEvent *event)
{//重写鼠标右键事件if(event->button() == Qt::RightButton){qDebug()<<"右键";menuQuit->exec(QCursor::pos()); // 弹出位置为鼠标当前的位置}//重写鼠标左键事件 --  实现拖动窗口//鼠标当前位置: event->globalPos()//窗口当前位置:this->pos()//新窗口位置://1.当鼠标左键被按下的时候记录鼠标/窗口当前值,还有鼠标与窗口的相对值 event->pos() --鼠标相对窗口的坐标//2.鼠标左键释放的时候获得鼠标当前值,对应的窗口位置也根据相对距离进行偏移if(event->button() == Qt::LeftButton){qDebug()<<"左键";//pos() 是相对整个widget页面的坐标  globalpos() 才是相对真个电脑窗口的坐标//以下两种方式均可得到偏移值//mOffset = event->globalPos()-this->pos();mOffset = event->pos();//qDebug()<<mOffset.x()<<"  "<<mOffset.y();}}
 

重写鼠标移动事件

// 将窗口根据鼠标当前位置和偏移值进行移动(这个值是固定的,作为窗口移动的桥梁)
void Widget::mouseMoveEvent(QMouseEvent *event)
{// 将窗口根据鼠标当前位置和偏移值进行移动(这个值是固定的,作为窗口移动的桥梁)this->move(event->globalPos()-mOffset);
}
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第38课-密室逃脱-3D互动剧情

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第38课-密室逃脱 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

热镀锌钢板耐液体性能测 彩钢板抗拉强度检测

钢板检测范围&#xff1a;钢板、彩钢板、不锈钢板、耐磨钢板、合金钢板、压型钢板、冷轧钢板、弹簧钢板、碳钢板、热轧钢板、厚钢板、热镀锌钢板、冲孔钢板、船用钢板、硅钢板、花纹钢板、压力容器钢板、耐候钢板、 钢板检测项目包括化学性能检测、性能检测、机械性能检测、老…

AI办公自动化:kimi批量搜索提取PDF文档中特定文本内容

工作任务&#xff1a;PDF文档中有资料来源这一行&#xff0c;比如&#xff1a; 资料来源&#xff1a;moomoo tech、The Information、Bloomberg、Reuters&#xff0c;浙商证券研究所 数据来源&#xff1a;CSDN、浙商证券研究所 数据来源&#xff1a;CSDN、arXiv、浙商证券研…

C++ 19 之 封装

c19封装.cpp #include <iostream> #include <string.h> using namespace std;// 封装&#xff1a;将行为和属性作为一个整体来表现生活中的事物// 人&#xff1a; 行为&#xff1a; 吃饭 属性&#xff1a; 姓名、年龄 struct person {char name[20];int age;…

掌握特劳特定位理论核心,明晰企业战略定位之重

在当今瞬息万变的市场环境中&#xff0c;企业战略定位的重要性日益凸显。它不仅是企业在激烈竞争中保持优势的关键&#xff0c;更是企业实现长期可持续发展的基石。 哈佛大学战略学教授迈克尔波特&#xff08;Michael Porter&#xff09;指出战略就是形成一套独具的运营活动&a…

为什么微信输入法是比搜狗输入法更好的选择?

微信输入法官网&#xff1a;https://z.weixin.qq.com/ 最近使用搜狗输入法时&#xff0c;频繁弹出广告&#xff0c;实在令人烦恼&#xff0c;于是我干脆卸载了它。然而&#xff0c;电脑上没有输入法是不行的。经过在网上对比了许多输入法软件后&#xff0c;我发现了微信输入法。…

skywalking9.4 链路追踪

下载&#xff0c;很慢很慢很慢&#xff01;&#xff01;&#xff01;&#xff01; jdk 使用jdk17 skywalking-apm 9.4 java-agent 9.0 idea 本地开发配置 第1行配置按实际来&#xff1b; 第2行自定义&#xff0c;一般和微服务名称相同&#xff1b; 第3行ip写安装的机器ip,端…

装备名称检索与推荐

1、引言 在这个信息爆炸的时代&#xff0c;无论是军事爱好者、科研工作者&#xff0c;还是户外探险者&#xff0c;他们都需要快速准确地获取特定装备的信息。装备名称检索推荐系统正是为了应对这一挑战而生。它像一位经验丰富的向导&#xff0c;引领用户穿越复杂的装备海洋&am…

微信公众号打通与登录的实现

今天实现一下与微信公众号进行对接&#xff0c;通过扫描二维码的方式来进行注册与登录&#xff0c;获取用户的微信唯一标识作为用户的username&#xff0c;下面我们开始编写。 骨架建立&#xff1a; 建包&#xff1a; 第一步还是先将骨架建好&#xff0c;与网关骨架差不多&a…

玄机平台应急响应—MySQL应急

前言 这个是比较简单的&#xff0c;其实和MySQL没啥太大的关系&#xff0c;没涉及太多MySQL的知识。看一下它的flag要求吧。 flag1 它说黑客写入的shell&#xff0c;那我们就去它的网站目录去看看&#xff0c;果然有一个叫sh.php的文件。 flag1{ccfda79e-7aa1-4275-bc26-a61…

DeepDriving | CUDA编程-05:流和事件

本文来源公众号“DeepDriving”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;CUDA编程-05&#xff1a;流和事件 1 CUDA流 在CUDA中有两个级别的并发&#xff1a;内核级并发和网格级并发。前面的文章DeepDriving | CUDA编程-04&…

ESP32 BLE学习(0) — 基础架构

前言 &#xff08;1&#xff09;学习本文之前&#xff0c;需要先了解一下蓝牙的基本概念&#xff1a;BLE学习笔记&#xff08;0.0&#xff09; —— 基础概念&#xff08;0&#xff09; &#xff08;2&#xff09; 学习一款芯片的蓝牙肯定需要先简单了解一下该芯片的体系结构&a…

园区地图导航系统:技术原理、部署方案与智能化应用解析

随着智能化时代的到来&#xff0c;园区管理面临诸多挑战。维小帮园区地图导航系统&#xff0c;采用前沿技术&#xff0c;为园区提供全面的导航解决方案&#xff0c;极大提升了园区管理效率和用户体验。 一、园区地图导航系统的功能特点 维小帮园区地图导航系统&#xff0c;以其…

MongoDB 多层级查询

多层级查询 注意&#xff1a;要注意代码顺序 查询层级数据代码放前面&#xff0c;查询条件放后面 if (StringUtils.isBlank(params.getDocType())) {params.setDocType(DOC_TDCTYPE);}String docName mapper.findByDocInfo(params.getDocType());List<ExpertApprovalOpin…

智能化状态管理:自动状态流转处理模块

目录 基本背景介绍 具体实现 基本数据准备 基本数据表 状态转换常量 状态转换注解 任务处理模版 各任务实现逻辑 开启比对任务进行处理 降噪字段处理任务处理 开启业务数据比对处理 业务数据比对处理 开始核对数据生成最终报告处理 核对数据生成最终报告处理 状…

AI项目二十二:行人属性识别

若该文为原创文章&#xff0c;转载请注明原文出处。 分享一个行人属性分析系统&#xff0c;识别行人&#xff0c;并标记每个人的属性。 项目代码来自公众号渡码的项目。 本人用Win10复现完整项目&#xff0c;并记录过程。 源码会上传到github,可以自行下载测试。 Yinyifen…

Flutter 简化CustomPainter的绘制

文章目录 前言一、为何简化&#xff1f;1、通常做法&#xff08;1&#xff09;、绘制形状1&#xff08;2&#xff09;、绘制形状2&#xff08;3&#xff09;、界面显示 2、简化 二、完整代码三、使用示例1、绘制图形2、动态触发绘制 总结 前言 使用Flutter做界面时&#xff0c…

Linux DMA-Buf驱动框架

一、DMABUF 框架 dmabuf 是一个驱动间共享buf 的机制&#xff0c;他的简单使用场景如下&#xff1a; 用户从DRM&#xff08;显示驱动&#xff09;申请一个dmabuf&#xff0c;把dmabuf 设置给GPU驱动&#xff0c;并启动GPU将数据输出到dmabuf&#xff0c;GPU输出完成后&#xf…

大数据实训项目(小麦种子)-02、实训项目整体功能介绍与演示

文章目录 前言界面及功能描述实现功能描述技术选型界面展示首页界面功能1&#xff1a;HDFS&#xff0c;选择文件上传文件详细步骤 功能2&#xff1a;MapReduce预处理数据功能3&#xff1a;Hbase存储小麦种子数据并查询前10条记录功能4&#xff1a;Hive分析原始csv文件数据并ech…

RTA_OS基础功能讲解 2.9-警报器

RTA_OS基础功能讲解 2.9-警报器 文章目录 RTA_OS基础功能讲解 2.9-警报器一、警报器简介二、警报器配置2.1 激活一个任务2.2 设置一个事件2.3 执行回调函数2.4 递增一个(软件)计数器三、警报器设置3.1 绝对警报3.1.1 单次触发3.1.2 周期触发3.1.3 在过去设置警报3.1.4 将绝对…