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

【QT项目-天气预报】 / 重写父类的eventFilter的方法// 绘制高低温曲线// 绘制高温曲线// 绘制低温曲线使用方法将当前窗口对象MainWindow作为事件过滤器安装到和上。方法是QObject类的方法,用于安装一个事件过滤器。事件过滤器可以监视和处理指定对象的事件。通过将当前窗口对象作为事件过滤器安装到和上,可以在MainWindow类中的eventFilter方法中对这两个对象的事件进行处理。//参数指定为this,也就是当前窗口对象 MainWindow。 阅读详情

 鼠标右键实现退出界面

知识点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天气预报 项目介绍 本项目基于QT平台开发的一款天气预报的应用,效果图如下: 1、 有城市的天气预报,有背景图、控件半透明化。 2、 显示日期,城市名称,当天的天气预报 3、 当天天气预报的详细数据 4、 该天的一些生活指数:如感冒指数、每日寄语 5、 当天的日出日落时间,及扇形时间占比 6、 该城市,前一后四天的天气预报,含有日期,星期,天气,高低温 7、 最近一周的温湿度曲线 8、 搜索框、刷新按钮。 9、 窗口大小固定,无最大、最小化、关闭按钮。鼠标拖动窗口移动,右键退出。 10、自定义按钮图标 实现思路 阅读详情

相关推荐

【QT学习笔记】基于QT的天气预报

【QT学习笔记】基于QT的天气预报前言那就开始吧!先看一下效果颜面最重要,画个UI构造实现怎么开始?开始解析数据关于城市切换ok感谢 前言 学习qt已经有一段时间了,做的都是一些单机类的小软件。突然有了兴致,做了这个能联网的软件,天气预报软件。 网络上有很多免费的天气api,有 xml 格式,也有 json 格式的。具体 xml 和 json 有什么区别,这里不做解释,本文所使用天气接口返回的是 ...

weixin_43970753的博客 5154

基于Qt的天气预报

基于Qt的天气预报

qq_51762652的博客 858

QT小项目--天气预报桌面小程序(鼠标右击事件2)

这里注意下,我要实现的内容是关闭和最小化程序,所以这里我用的一个menu。contextMenuEvent是一个事件处理函数,用于处理右键菜单事件。默认情况下,它会创建并显示一个标准的上下文菜单(QMenu),但你也可以根据需要自定义菜单的内容和行为。你可以选择使用其他的QWidget子类作为菜单的容器,例如QToolBar、QComboBox等。这样做的好处是可以实现更加自由和灵活的菜单界面。当然,如果你只是需要简单的右键菜单,使用QMenu是最常见和方便的方式。

weixin_60770377的博客 1986

QT项目—天气预报

qt天气项目

qq_52201535的博客 5387

Qt天气预报项目

使用qt6 cmake实现的天气预报项目。主要功能: 实时展示城市的基本天气情况,包括温度、风向、空气质量等, 不同的天气情况和空气质量显示不同的图标和背景色, 展示未来天气状况并绘制温度折线图, 可以根据输入的城市名切换城市, 隐藏边框,窗口随鼠标拖拽而移动。

2301_82023822的博客 1742

C/C++教程 第二十四章——Qt制作天气预报

本章主要讲解如何用Qt开发一个界面好看的天气预报软件,设计界面开发以及网络编程

余识- 4581

Qt——天气预报项目

1.窗口1:使用水平布局,内包含俩个QLabel类和一个QLineEdit类这里可以设置LineEdit中的提示文字 2.窗口2:使用栅格布局,这个天气图标组件的大小需限制一下 3.窗口3:里面包含一个子窗口,设置子窗口背景样式为橘色子窗口中的组件先垂直布局,后水平布局。最后整体再来一个栅格布局4.窗口4:里面包含6个子窗口。子窗口0401、0402、0406都需要进行栅格布局子窗口0401和0406中的组件是由俩个QLabel类拼接在一起的。 5.最后给4个窗口整体进行垂直布局即可解决方法:重写鼠标点击事

m0_73510889的博客 1543

QT天气预报项目

如下图所示,绿色箭头是两者差值,首先得到差值以后,再得到新的坐标位置,将其减去绿色差值即可得到此时窗体的位置。

m0_51430584的博客 985

基于QT天气预报项目,推荐初学者练手

本项目基于QT平台开发的一款七天天气预报,一个适合小白练手的项目。

qq_51163115的博客 9777

QT项目——天气预报

本项目主要涉及 Qt 界面设计、HTTP 通信、JSON 数据解析、自定义控件绘制温湿度曲线、Qt 信号与槽等的应用,通过调用天气预报API解析 JSON 数据获取未来七天的温湿度、风力强度、天气状态等信息,最后显示在Qt UI界面。

wei_Embedded_z的博客 2167

QT实战项目五(天气预报界面)

JSON)是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript的一个子集,尽管它是独立于语言的,且有多种语言支持。JSON常用于网络应用程序中的数据传输,尤其是在Web应用程序中与后端服务器通信。易于阅读和编写:JSON的结构简单、清晰,对人类来说易于阅读和编写;轻量级数据格式:相较于XML等标记语言,JSON更轻量,使用更少的符号,数据体积更小;易于解析和生成:大多数编程语言都提供了解析和生成JSON的内置支持或库;

qq_53918454的博客 1206

Qt之天气预报——功能实现篇(含源码+注释)

天气预报包含实时天气模式和预报天气模式。添加右键菜单; 可切换天气模式; 显示天气报告时间; 刷新功能(右键菜单); 城市选择模式:包括下拉框选择和文本框输入(右键菜单); 切换城市更新天气预报信息,显示报告时间、城市、温度等常用信息。实时天气模式功能比较单一,仅显示当天的天气基本信息。预报天气包含四天的天气信息(包括当天天气),默认显示当天天气信息;可通过自定义按钮对象切换天气信息,且预报天气下方为预报日期日、夜间温度的折线图。下图通过下拉列表框切换城市从而自动查询天气,其中包括实时天气和预报天气。

lw的博客 1万+

基于QT的天气预报软件开发实战项目

当某些UI模块频繁出现时(比如上面的搜索框),就应该把它封装成独立组件。Q_OBJECTpublic:signals:private:构造函数里调用setupUI()初始化界面,并建立信号连接。外部使用者只需关心信号即可:完美实现了高内聚低耦合的设计原则。以后就算内部改成语音输入或扫码识别,对外接口也不用变。顺便说一句,这种模式在大型项目中极为常见。你可以想象整个天气App由十几个这样的小部件拼装而成,每个人负责一块,最后组装成完整产品,协作效率极高。

weixin_36149538的博客 902

Qt项目——天气预报

通过对之前Qt的学习其实我们就已经有一点经验了,做天气预报只需要了解以下内容:stylesheet界面美化Json数据解析HTTP通信自定义控件绘制温度能讲的不重复的也基本上没什么了,其实明白它整个框架,会用常用的控件,不会的就是查手册或者上网查资料 ,剩下的就是多练了,看着代码多敲多写。!!

ycs66的博客 1016

qt天气预报()

qt天气预报demo,内容主要有 通过API来获取天气信息,在解析数据,显示到部件上,以及二级联动下拉框的使用,通过IP来定位,实现默认位置。局域网IP暂时不能获取到内网IP

重写QStyle,高端定制QMenu风格样式,仿qq右键菜单

重写QProxyStyle,实现Qmenu的背景半透明效果,边框圆角,菜单项图标定制大小。二级菜单间距调整,菜单项高度调整。菜单项字体设置。

Qt天气预报

目录环境weather.promain.cppweather.hweather.cppweatherdata.h 今天、未来6天数据体weathertool.h 获取城市编码工具类ui_weather.h UI设计器生成的头文件UI效果注意笔记源码 环境 目前只兼容 Qt 5.14.2 MinGW 64-bit;Qt Creator 4.11.1 和 Qt 5.15.2 MinGW 64-bit;Qt Creator 9.0.1 在UI设计器生成的头文件中 ui_weather.h void ret

qq_47355554的博客 2377

TMS320F280049C 学习笔记11 控制率加速器 CLA 例程

总结了TI官方在C2000Ware_3_01_00_00版本中提供的7个与CLA相关的例程。

whyorwhnt的专栏 1万+

Qt之天气预报——预备篇

高德开放平台API Key的创建与使用 高德开放平台控制台的创建与使用 高德开放平台天气预报的创建与使用

lw的博客 6964

使用Qt Creator调用eBUS SDK

在新界面,勾选左下角“ Show unreachable Network Devices",可以看到没有成功连接的网络相机,原因是IP地址配置错误。每个版本的OpenCV的依赖项的名字都不同,我这里是opencv_world490.lib与opencv_world490d.lib。函数,可以看到在这里是图像缓存区,能够对捕获的图像进行一些操作。在Visual Studio打开项目属性,在VC++目录这里,把Opencv的路径添加进去。这时,会自动跳转到mainwindow.cpp,生成该按钮对应的槽函数。

qq_35685051的博客 1288

黑群晖二合一已损毁_手动修复黑群晖已损毁磁盘空间

lz的用法是这样的,一个中古级mac mini 2011上装有vmware esxi 7.6, 然后上面挂载了lz的华芸Asustor Nas的iscsi空间,lz用的是basic volume,然后esxi上面有虚拟的黑群晖6.2.2-24922,黑群晖的docker里跑着不可描述软件,但是发现下载速度过快时,比如有好几个文件同时下载,总速度超过60MB/s以后storage manager里很...

weixin_39669629的博客 1万+
上一篇: Qt项目天气预报(1) - ui界面搭建
下一篇: Qt项目天气预报(3) - qt的http编程获取天气数据
mx_jun
博客等级 码龄5年 1605粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值