1.前言
前面的几个章节,我大致介绍了Qt的使用方法,突然面对这么一大堆东西,可能你会觉得有点难以接受。
不过这也正好体现了本系列教程的目的,让每一篇都有一定的含金量。
所以本节,我就将带大家用Qt制作一个天气预报的项目,让大家熟悉熟悉Qt的基本开发流程。
本项目的总体逻辑并不复杂,更主要的还是学习一下常用控件的用法。
前面介绍Qt库时我就说过,通过请求一个天气预报API,获取其中的天气预报信息,为json
格式,然后我们再解析这个json格式的数据,显示到控件上即可。
有思路的话可以自己先写写看,它主要用到了Qt网络库,前面章节可能没有讲到过,所以本章也会顺带介绍Qt网络库的使用。
最终成品大致如下:
看起来还算不错吧!
2.建立项目
因为我个人习惯于使用vs,所以这里是在vs里面进行开发的,建立流程前面章节已经提到过了,这里不再赘述。
只需要注意一下我这里的项目名为Weather
、并且选择的是widget
类型就可以了:
然后还要下载本项目的资源文件:weather-res
下载解压后文件如下:
其中一个是包含各种图片的文件夹res
,一个是中国城市ID大全,并且为json
格式版本,这是我们在项目中要用到的,你需要将其复制到你自己的项目文件夹中去:
至此,我们的前期准备工作就完成了。
3.界面开发
3.1 去除标题栏
首先我们还是先来把界面调整好,比如你发现没,这个软件是没有标题栏的。
去除标题栏的原因很简单,因为我们希望自定义标题栏的样式,如果保留默认的,就会感觉整个软件不那么的好看。
所以首先第一步,我们先来去除这个标题栏:
setWindowFlag(Qt::FramelessWindowHint);
方法就是调用上面这个函数:
这个函数用于设置当前窗口的标志信息,参数为FramelessWindowHint
,即无标题类型。
更多类型可以参考文档,前面已经教过怎么查找了。
标题栏是没了,但又出现了一个问题,如果此时你运行程序,你就会发现你无法移动、退出程序了。
因为这些都是标题栏的作用,为了让我们的窗体也有这个功能,我们就需要重载鼠标移动、点击、释放这三个函数,也就是自定义:
//重写鼠标事件
void mousePressEvent(QMouseEvent* e);
void mouseMoveEvent(QMouseEvent* e);
void mouseReleaseEvent(QMouseEvent* e);
这些函数是可以在文档中找到的,在保护属性函数栏中:
可以看到它们前面的virtual
关键字,这是虚函数,可以被我们重写,所以就有了我们这里的代码,我们就是想要重写鼠标事件的回调函数:
然后我们需要考虑一件事情,那就是鼠标是如何拖动窗口的:
- 鼠标左键点击
- 鼠标移动,窗口跟着鼠标移动
- 鼠标左键松开,窗口停止移动
因此我们就需要两个变量来保留鼠标左键点击时的状态:
同时我们使用这个QMouseEvent
类时,还需要包含上面这个qevent.h
这个头文件才行:
#include<qevent.h>
QPoint m_prePoint; //记录鼠标左键点击时的位置
bool m_islBtn; //记录鼠标左键是否是按下状态