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

embedded/2024/10/16 2:25:45/

 鼠标右键实现退出界面

知识点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.ppmy.cn/embedded/48807.html

相关文章

挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构

目标 在清晨的代码编辑器上&#xff0c;一场新的挑战即将开始。程序员们肃立于安静的办公室&#xff0c;眼神专注地盯着屏幕&#xff0c;等待着编译器的一声提示。 随着编译器输出的激动人心的"start!"的提示&#xff0c;战斗的序幕拉开了。Bug如潮水般涌来&#x…

HCIP认证笔记(判断题)

192、两台LSR之间交换hello消息,触发LDP会话建立,hello消息会携带传输地址,传输地址大的一方将作为主动方; 193、两台LSR发送hello消息,其中hello消息会采用组播或单播的形式发送; 194、LSR ID:缺省情况下,公网的LDP传输地址等于设备的LSR ID,私网的传输地址等于接口的…

Spring Security——结合JWT实现令牌的验证与授权

目录 JWT&#xff08;JSON Web Token&#xff09; 项目总结 新建一个SpringBoot项目 pom.xml PayloadDto JwtUtil工具类 MyAuthenticationSuccessHandler&#xff08;验证成功处理器&#xff09; JwtAuthenticationFilter&#xff08;自定义token过滤器&#xff09; W…

秋招突击——第四弹——Java的SSN框架快速入门——Maven

文章目录 引言Maven分模块开发与设计分模块开发的过程 依赖管理可选依赖与排除依赖 继承与聚合聚合继承 属性和版本管理属性扩大集中管理的范围版本管理 多环境开发多环境开发 私服简介安装私服资源操作流程分析上传和下载 总结 引言 前一个部分花了太多时间&#xff0c;后续得…

消费者消费数据时报错:INVALID_REPLICATION_FACTOR

今天部署了kafka集群&#xff0c;三台服务器&#xff0c;启动后&#xff0c;生产者发送数据&#xff0c;消费者接收数据的时候报错&#xff0c;INVALID_REPLICATION_FACTOR。 查了很多资料&#xff0c;说是要改kafka下config目录的server.properties,可能是副本数太小&#xff…

有状态服务和无状态服务

有状态服务和无状态服务在不同的业务场景下有不同的应用&#xff0c;以下是一些常见的例子&#xff1a; 有状态服务的场景&#xff1a; 用户会话管理&#xff1a; 用户登录后&#xff0c;会话信息&#xff08;如用户ID、权限、购物车内容等&#xff09;需要在服务端保持状态。…

2024全新仿麻豆视频苹果cms源码v10影视模板

下载地址&#xff1a;2024全新仿麻豆视频苹果cms源码v10影视模板 高端大气的设计&#xff0c;适合做电影、连续剧、综艺、动漫、微电影、纪录片、海外剧等视频网站

ARM32开发--PWM与通用定时器

知不足而奋进望远山而前行 目录 文章目录 前言 学习目标 学习内容 PWM pwm原理 需求 开发流程 初始化PWM PWM占空比控制 main函数修改duty 输出通道 关心的内容 重要的关键词 周期 分频 占空比 总结 前言 在微控制器开发中&#xff0c;理解和掌握PWM&#x…