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);
}
相关文章:
Qt项目天气预报(2) - 重写事件函数
鼠标右键实现退出界面 知识点QMenu: QMenu 弹出对话框 --> 相对QMessageBox 更加轻量点 QMenu是Qt库中用于创建弹出式菜单的类,它通常出现在应用程序的顶部菜单栏、按钮的右键菜单或自定义上下文菜单中。以下是关于QMenu的详细介绍: 1. 类的基本特…...
uni-app前端,社区团购系统搭建部署
目录 前言: 一、社区团购模式: 二、社区团购系统功能: 三、总结: 前言: 区团购系统是一种利用互联网技术和组织力量,通过线上线下结合的方式,为社区居民提供方便快捷的商品和服务采购平台。…...
基于iBeacon蓝牙定位技术的反向寻车系统
随着城市化进程的加速和汽车保有量的不断增加,大型停车场成为了人们日常生活中不可或缺的一部分。然而,在繁忙的停车场中快速找到自己的车辆,成为了许多车主的难题。为了解决这一问题,维小帮基于iBeacon蓝牙技术打造的反向寻车系统…...
CCAA质量管理【学习笔记】 备考知识点笔记(五)质量设计方法与工具
第五节 质量设计方法与工具 1 任 务 分 解 法 1.1 概念 任务分解法,又称工作分解结构 (Work Breakdown Structure, 简 称 WBS) 。WBS 指以可交付成果为 导向,对项目团队为实现项目目标并完成规定的可交付成果而执行的工作所进行的层次分解。W…...
RIP路由协议汇总(华为)
#交换设备 RIP路由协议汇总 一、原理概述 当网络中路由器的路由条目非常多时,可以通过路由汇总(又称路由汇聚或路由聚合)来减少路由条目数,加快路由收敛时间和增强网络稳定性。路由汇总的原理是,同一个自然网段内的不…...
服务部署:.NET项目使用Docker构建镜像与部署
前提条件 安装Docker:确保你的Linux系统上已经安装了Docker。如果没有,请参考官方文档进行安装。 步骤一:准备项目文件 将你的.NET项目从Windows系统复制到Linux系统。你可以使用Git、SCP等工具来完成这个操作。如何是使用virtualbox虚拟电…...
力扣1170.比较字符串最小字母出现频次
力扣1170.比较字符串最小字母出现频次 f()是找最小字母的次数 即cnt中第一个出现过的字母 将word中所有字符串都处理存入nums nums排序 再做二分 class Solution {public:int f(string s){int cnt[26] {0};for(char c:s)cnt[c - a] ;for(int i0;i<26;i) cout<<cn…...
boost asio异步服务器(3)增加发送队列实现全双工通信
增加发送节点 构造发送节点,管理发送数据。发送节点的类如下。 这个发送节点用于保证发送和接收数据的有效性。 增加发送队列 前边实现的是一个简单的echo服务器,也就是服务器将收到的内容发送给对应的客户端。但是在实际的服务器设计中,服务…...
49.Chome浏览器有三种清缓存方式
49.Chome浏览器有三种清缓存方式:正常重新加载、硬件重新加载、清空缓存并硬性重新加载 1、【正常重新加载】 触发方式:①F5 ②CtrlR ③在地址栏上回车 ④点击链接 如果缓存不过期会使用缓存。这样浏览器可以避免重新下载JavaScript文件、图像、…...
Python爬取与可视化-豆瓣电影数据
引言 在数据科学的学习过程中,数据获取与数据可视化是两项重要的技能。本文将展示如何通过Python爬取豆瓣电影Top250的电影数据,并将这些数据存储到数据库中,随后进行数据分析和可视化展示。这个项目涵盖了从数据抓取、存储到数据可视化的整个…...
【背包题】oj题库
目录 1282 - 简单背包问题 1780 - 采灵芝 1888 - 多重背包(1)编辑 1891 - 开心的金明 2073 - 码头的集装箱 1905 - 混合背包 1282 - 简单背包问题 #include <bits/stdc.h> using namespace std; //二维数组:dp[i][j]max(dp[i-1][j],v[i]dp[…...
Web前端弱势因素:深入探讨与挑战解析
Web前端弱势因素:深入探讨与挑战解析 在快速发展的Web前端领域,尽管技术日新月异,但仍存在一些固有的弱势因素。这些因素不仅影响了开发效率和用户体验,也带来了诸多挑战。本文将深入探讨Web前端的弱势因素,并从四个方…...
元素在超出当前界面的下拉列表中如何定位
有时我们会遇到一种情况是,当我们找一个视频列表中的视频,在页面的最底层,此时selenium 无法定位到这个元素,因为 selenium只能定位页面上显示出来内容的元素,需要通过下拉框把界面拉到该元素所在的位置,再…...
Vscode中使用make命令
前言 需要注意,如下操作需要进行网络代理,否则会出现安装失败的情况 安装 第一步 — 安装MingGW (1)进入官网下载 (2)下载完成之后,双击exe文件 (3)点击Install &#x…...
配置完eslint没有用?
当你使用 npx eslint --init 生成配置文件后 你也配置好了.prettierrc 当你在代码写一点小问题的时候 发现eslint没有进行检查 原因是你生成的 .eslintrc.js中没有加上这个配置 extends: [.....plugin:prettier/recommended],加上以后重启vscode你会发现...
[Nacos]No spring.config.import property has been defined
在学习 Spring Cloud Alibaba ,Nacos组件,创建一个cloudalibaba-config-nacos-client,加载多配置集时遇到问题 配置了 bootstrap.yml 后启动项目报错: 是因为在springcloud 2020.0.2版本中把bootstrap的相关依赖从spring-cloud-s…...
【操作与配置】Pytorch环境搭建
安装显卡驱动 显卡驱动是一种软件程序,用于控制显卡硬件与操作系统之间的通信和交互。显卡驱动负责向操作系统提供有关显卡硬件的信息,以及使操作系统能够正确地控制和管理显卡的各种功能和性能。显卡驱动还包含了针对不同应用程序和游戏的优化ÿ…...
判断QT程序是否重复运行
打开exe,再次打开进行提示。 main.cpp添加: #include "QtFilePreview.h" #include <QtWidgets/QApplication> #include <windows.h> #include <qmessagebox.h> #pragma execution_character_set("utf-8")bool Ch…...
利用Axios封装及泛型实现定制化HTTP请求处理
本案例旨在教授如何使用Axios库结合TypeScript泛型进行HTTP请求的高级封装,以提升代码的可复用性和类型安全性。我们将通过一个具体的示例,学习如何创建一个通用的请求函数,它能够适应不同类型的API响应,并在请求前后加入自定义逻…...
RN6752V1 高性能AHD转MIPIDVPBT656BT601芯片方案,目前适用于车载方案居多
RN6752V1描述: RN6752V1是一种模拟高清晰度(模拟高清)视频解码器IC,专为汽车应用而设计。它集成了所有必要的功能块: AFE,PLL,解码逻辑,MIPI和I2C接口等,在一个小的5mm …...
如何将MacBook刘海变成你的私人文件中转站:NotchDrop完整使用指南
如何将MacBook刘海变成你的私人文件中转站:NotchDrop完整使用指南 【免费下载链接】NotchDrop Use your MacBooks notch like Dynamic Island for temporary storing files and AirDrop 项目地址: https://gitcode.com/gh_mirrors/no/NotchDrop 你是否曾觉得…...
3步精通Rufus:ext文件系统格式化实战攻略
3步精通Rufus:ext文件系统格式化实战攻略 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 在Linux系统管理中,USB设备格式化常常成为技术人员的痛点——要么工具功能单一&a…...
4个维度解析EAS CLI:移动开发效率提升工具
4个维度解析EAS CLI:移动开发效率提升工具 【免费下载链接】eas-cli Fastest way to build, submit, and update iOS and Android apps 项目地址: https://gitcode.com/gh_mirrors/ea/eas-cli 定位核心价值:重新定义移动开发工作流 在移动应用开…...
知识蒸馏(Knowledge Distillation, KD)详细介绍
知识蒸馏(Knowledge Distillation, KD)详细介绍 目录 概述基本概念知识蒸馏的核心思想蒸馏过程知识类型损失函数架构设计应用场景优化策略挑战与局限最新进展总结 概述 知识蒸馏(Knowledge Distillation, KD)是一种模型压缩和…...
遥感项目实战:用SNAP高效处理Sentinel-2多景影像进行地表覆盖分析
遥感项目实战:用SNAP高效处理Sentinel-2多景影像进行地表覆盖分析 当我们需要对大面积区域进行地表覆盖分析时,单景Sentinel-2影像往往无法满足需求。这时,多景影像的拼接与处理就成为关键步骤。本文将带您深入了解如何利用SNAP软件高效处理S…...
嵌入式NTP客户端高精度时间同步实现
1. NTP客户端库深度解析:嵌入式系统中的高精度时间同步实现1.1 项目背景与工程痛点NTP(Network Time Protocol)是嵌入式设备实现网络时间同步的核心协议。在工业控制、数据采集、日志记录等场景中,毫秒级甚至亚毫秒级的时间精度直…...
需求分析避坑指南:如何避免‘用户说要马实际要车’的经典陷阱?
需求分析避坑指南:如何避免‘用户说要马实际要车’的经典陷阱? 在软件开发领域,需求分析是项目成败的关键环节。据统计,约70%的项目失败源于需求不明确或理解偏差。当用户说"想要一匹更快的马"时,他们真正需…...
探索式学习:UMA模型在水分解催化中的应用指南
探索式学习:UMA模型在水分解催化中的应用指南 【免费下载链接】ocp Open Catalyst Projects library of machine learning methods for catalysis 项目地址: https://gitcode.com/GitHub_Trending/oc/ocp 突破传统计算瓶颈:UMA模型的核心价值解析…...
告别繁琐!3步解锁教育资源获取新方式,效率提升10倍的高效工具
告别繁琐!3步解锁教育资源获取新方式,效率提升10倍的高效工具 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 在数字化学习与教学资源管理…...
Yuzu模拟器版本高效管理实战指南:从新手到专家的避坑技巧
Yuzu模拟器版本高效管理实战指南:从新手到专家的避坑技巧 【免费下载链接】yuzu-downloads 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu-downloads 你是否曾遇到这样的困境:刚更新的Yuzu模拟器让原本流畅的游戏变得卡顿,…...
