23.Qt开发天气预报应用教程

1.前言

前面的几个章节,我大致介绍了Qt的使用方法,突然面对这么一大堆东西,可能你会觉得有点难以接受。

不过这也正好体现了本系列教程的目的,让每一篇都有一定的含金量。

所以本节,我就将带大家用Qt制作一个天气预报的项目,让大家熟悉熟悉Qt的基本开发流程。

本项目的总体逻辑并不复杂,更主要的还是学习一下常用控件的用法。

前面介绍Qt库时我就说过,通过请求一个天气预报API,获取其中的天气预报信息,为json格式,然后我们再解析这个json格式的数据,显示到控件上即可。

有思路的话可以自己先写写看,它主要用到了Qt网络库,前面章节可能没有讲到过,所以本章也会顺带介绍Qt网络库的使用。

最终成品大致如下:

image-20231012090659948

看起来还算不错吧!

2.建立项目

因为我个人习惯于使用vs,所以这里是在vs里面进行开发的,建立流程前面章节已经提到过了,这里不再赘述。

只需要注意一下我这里的项目名为Weather、并且选择的是widget类型就可以了:

image-20231012091434617

然后还要下载本项目的资源文件:weather-res

下载解压后文件如下:

image-20231012084412834

其中一个是包含各种图片的文件夹res,一个是中国城市ID大全,并且为json格式版本,这是我们在项目中要用到的,你需要将其复制到你自己的项目文件夹中去:

image-20231012091629511

至此,我们的前期准备工作就完成了。

3.界面开发

3.1 去除标题栏

首先我们还是先来把界面调整好,比如你发现没,这个软件是没有标题栏的。

image-20231012092058116

去除标题栏的原因很简单,因为我们希望自定义标题栏的样式,如果保留默认的,就会感觉整个软件不那么的好看。

所以首先第一步,我们先来去除这个标题栏:

setWindowFlag(Qt::FramelessWindowHint);

方法就是调用上面这个函数:

image-20231012092339495

这个函数用于设置当前窗口的标志信息,参数为FramelessWindowHint,即无标题类型。

更多类型可以参考文档,前面已经教过怎么查找了。

标题栏是没了,但又出现了一个问题,如果此时你运行程序,你就会发现你无法移动、退出程序了。

因为这些都是标题栏的作用,为了让我们的窗体也有这个功能,我们就需要重载鼠标移动、点击、释放这三个函数,也就是自定义:

//重写鼠标事件
void mousePressEvent(QMouseEvent* e);
void mouseMoveEvent(QMouseEvent* e);
void mouseReleaseEvent(QMouseEvent* e);

这些函数是可以在文档中找到的,在保护属性函数栏中:

image-20231012092811525

可以看到它们前面的virtual关键字,这是虚函数,可以被我们重写,所以就有了我们这里的代码,我们就是想要重写鼠标事件的回调函数:

image-20231012093119674

然后我们需要考虑一件事情,那就是鼠标是如何拖动窗口的:

  1. 鼠标左键点击
  2. 鼠标移动,窗口跟着鼠标移动
  3. 鼠标左键松开,窗口停止移动

因此我们就需要两个变量来保留鼠标左键点击时的状态:

image-20231012094012829

同时我们使用这个QMouseEvent类时,还需要包含上面这个qevent.h这个头文件才行:

#include<qevent.h>

QPoint m_prePoint; //记录鼠标左键点击时的位置
bool m_islBtn; //记录鼠标左键是否是按下状态
作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux