1.前言
前面一章我提到了数据库,以及常见的数据存储格式文件,但由于目前C++
并没有标准库让我们使用,所以只能暂且搁置。
所以从本章开始,我将开始介绍Qt的基本使用,Qt里面含有大量现成的库可以让我们调用,更加方便!
视频版Qt安装教程可以参见:Qt环境搭建
2.Qt初识与安装
首先还是得必须想明白一个问题,即什么是Qt?
简单点说,Qt其实是一个巨大的类库集合,如同我们前面使用到的MFC一样,都是对基本系统API进行了一定的封装。
但与MFC不同的是,Qt是跨平台的,即你可以使用一份代码,在不同的平台编译!
但前提是你并不调用特定平台的API,而MFC就是因为其本身只是对win api的封装,所以只能用于Windows平台。
除此之外,另一个巨大的不同就是,Qt封装的库非常简洁易用,而且其APi文档也会被下载到本地,可以很方便查阅,而不用像MFC一样,每次都需要联网去官网查询API信息。
同时,Qt还封装了大量的第三方库,比如操作json
格式的库就存在于Qt的类库中,可以直接使用,后面我们会进行讲解!
说了这么多,可能大家听着都有点迷糊,不过不要紧,我们一步一步学习,你就会自己体会到Qt的妙处。
首先来看一看如何下载Qt。
浏览器直接搜索Qt一般就会出现Qt的官网:
或者直接点击这里进入官网,然后点击右上角的下载:
注意,操作中途可能需要你注册账户,自己注册一个即可,不过要记住自己的账户名与密码,因为后面会使用。
然后选择下载开源版的:
滑到页面下方,选择下载Qt在线安装:
然后点击下载即可:
下载完成后是一个.exe
的文件,它并不是qt,而是用于下载Qt的一个下载器,由于其国内下载qt速度可能很慢,所以推荐使用镜像下载。
方法就是通过命令行启动该下载器:
.\qt-online-installer-windows-x64-4.8.0.exe --mirror https://mirrors.ustc.edu.cn/qtproject/
第一步就是登录Qt账户,如果你前面没有注册,那可以在这里进行注册,然后登录:
然后是开源协议,这种对于我们个人开发者而言基本不用考虑,直接跳过下一步即可
然后一直点击下一步,开始获取Qt数据了。
获取完成后,让你选择是否发送数据给云端,这两个,选谁都可以,然后继续下一步:
然后自己选择安装的文件路径,以及选择下面的第一个自定义安装,然后下一步:
这里先选择旁边的Latest supported release
,即:最新支持的发行版本。
以前是有一个LTS
选项的,为长期支持版本,不清楚什么原因被取消了,长期支持版本会更加的稳定,不存在出现了什么bug,就不再修复的问题。
所以作为正常开发来说,我们一般会选择下载长期支持的版本,即带有LTS
(Long Term Support
缩写)字眼的。
目前最新的长期支持版本为6.5
。
这里看不到,要从qt官网的博客才能看到,感兴趣的可以去看看:Qt Blog
所以这里我就直接下载6.5
版本的了:
注意内部组件的勾选,当然如果你磁盘很大的话,可以全选,不用管这一步。
我这里去除了一些新手前期基本使用不到的东西,可以减少磁盘消耗以及下载时间,以后有需要的时候再下载即可。
然后点击下一步:
然后就是静待它安装成功了。
3.了解Qt结构
在正式写代码前,我们还是有必要了解一下我们上面都安装了些什么东西对吧!
首先来到我们的Qt安装目录,我安装在了:C:\Qt
首先我们要注意的就是这个MainTenanceTool.exe
程序,因为它可以用来给Qt组件升级或者添加移除其它组件的。
点击它就能看到其界面与安装Qt的程序很类似。
然后我们还需要注意的是这里:
这个文件夹里面存放的就是编译套件,由于前面安装中我只选择了msvc
这个编译套件,所以这里只有这一个,如果你全部安装,就会有多个编译套件。
不过对于我们目前而言,一般只用的上这个,即msvc
(Microsoft VC++)2019,我们使用的VS2019中的C++开发环境。
实际上vs2022也可以正常使用,因为后面开发我将使用VS来进行Qt程序的开发。
至于原因相信你们很快就会明悟:那就是习惯了VS的程序员,实在难以习惯Qt自带的IDE环境。
Qt自带的IDE环境实际上就是安装完成后打开的那个Qt creator
程序。
然后我们再来看看这个编译套件文件夹里面的一些重要程序:
首先是帮助程序,你在Qt中所使用的所有类,都可以通过这个程序寻找到帮助:
不过是全英文的,如果看不懂就翻译翻译好了,而且这些都写的很简略。
如果想要系统学习的话,还是得自己去网上搜一搜看有没有博主写过相关的教程,学起来就会容易很多。
然后是设计软件界面的程序:
这个程序就相当于我们在MFC
里面拖控件的功能,只不过Qt分离了出来,后面再具体讲解。
然后是语言翻译软件:
如果你想要做一个国际化的软件,那么软件语言就是一个大问题,而Qt就是通过这个程序来解决这一问题。
最后就是Qt中的IDE
:
它和VS一样,用于简化我们程序员的工作,可以直接在这个软件里面码代码、编译以及运行程序等等。
至于其它文件,很多都是Qt自带的辅助软件中使用到的资源文件,我们不用管。
也就是说,一般我们对于Qt,只用的到上面介绍的4个软件,这个我们心里得有个概念。
事实上,这样启动它们是很繁琐的,并且也没必要。
因为一般安装完Qt之后,这几个程序的快捷方式就都默认的加载到了开始菜单中,可以快速找到:
然后由于我们一般用不着语言翻译,就变成了三个,等到后面我们使用VS
代替Qtcreator
,就只用得上两个而已。
4.Qt creator的使用
虽说我并不准备在以后编程中使用这个Qt自带的IDE,但大家第一次接触,还是要学会使用这个自带的IDE,因为自带IDE的Bug
会少很多。
而使用VS,可能你就会遇到各种奇奇怪怪的问题,如果对Qt以及VS没有一定的了解,就很难解决这些问题。
所以还是先从Qtcreator
出发,等到后面我们再讲解VS中如何使用Qt。
启动qt creator
之后,我们就能看到下面这个界面:
对于一个IDE而言,第一步肯定是如何创建项目以及打开项目,就是上图的两个按钮,分别用于创建Qt项目以及打开Qt项目。
4.1 项目创建
首先看到创建项目:
这里首先第一栏是选择项目,对于我们用C++
开发桌面程序而言,选择第一个即可。
然后第二栏,为了更加直观的了解Qt,当然就是创建控制台程序了,然后点击选择。
首先是选择项目的名称,以及项目存放的路径:
然后是构建系统,既然是qt,一般就用qmake
即可,这是稍微麻烦一点的东西,后面有时间会出专门的文章对其介绍:
来到下一步,选择语言,如果你并不打算国际使用,这一步同样可以忽略:
我这里为了演示后面的代码,所以就选择了一个中文。
然后是选择该项目的构建工具,这里我就直接选择msvc2019
了:
然后是添加版本控制,这个是git相关的知识点,有兴趣的可以查看文章git详解,这里不用管:
汇总不用管,直接点击完成,就可以看到出现了下面的东西:
4.2 结构解析
这里首先我们看到的是自动生成的文件,main.cpp
里面的代码,看起来好像有点复杂对吧?
因为前面我们讲过,一个控制台项目,一般就一个main
函数即可,咋会需要这么多代码呢?
这就是Qt程序的独特之处,因为Qt类库本身有着一些不同于普通应用程序的地方,比如后面要讲解的Qt最强大的消息与槽机制,就是Qt所独有的。
而想要使用这些Qt类库的机制,就需要通过Qt的方法启动程序。
而QCoreApplication
这个类就是Qt用于控制台程序的核心程序类,通过这个类启动应用程序,我们就可以在控制台项目中也能享受到Qt的强大机制。
可以根据这个类的名称看出来,这是一个核心应用类,它代表了这个应用程序:
QCoreApplication a(argc, argv);
return a.exec();
通过将传入的参数来构造这个对象,然后调用该函数的exec
函数开始执行,最后直接返回该函数的返回值。
而中间的那一大堆,是语言翻译文件,如果你前面创建项目的时候,没有勾选中文,那么就不会有这段代码,不用管,这里只是给大家看一下如果选了它会出现什么东西。
这里注意Qt的逻辑,需要用到我们前面的windows
线程相关知识,即线程消息。
前面虽然我们一直提到的是窗口消息,但实际上消息的发送与接收都是在线程里面,通过线程执行对应的程序。
而这个exec
函数,就相当于那个接收消息的无限循环,只要你不点退出按钮,那么这个程序就不会退出,不会像普通main
函数一样。
而这个消息的发送与处理,就是Qt中的信号与槽的概念,后面很快会讲到。
然后我们再来看一看旁边生成的文件:
这里着重需要注意的是,这个pro
后缀的文件,这是Qt中的项目文件,由于Qt中并没有解决方案这个概念,它就相当于VS中某个具体项目的项目组织文件:
Qt以及VS就是通过项目文件,知道这个项目中包含了哪些文件,以及一些设置选项。
而打开项目,其实就是打开这个文件,Qt通过解析这个文件就能知道你这个项目上一次的情况。
由于VS与Qt的项目文件格式并不相同,所以并不能互相通用,相比较而言,Qt的项目文件处理起来会比较麻烦:
直接双击这个文件就可以直接打开,Qt项目文件并不能像VS那样智能,很多东西我们都必须自己手动操作
Qt的项目文件,除了添加源文件与头文件,会自动添加到项目文件外,其它的配置如果想要更改,基本都需要自己手动写入这个项目文件中。
比如CONFIG += c++17 cmdline
,代表配置为C++17
标准,以及控制台项目,如果你想要使用C++14
标准,在Qt里面就直接更改这个字符串即可。
更多的配置项可以在自己有需要的时候,浏览器搜索如何使用即可。
而下面的ts
后缀的文件,是语言相关的文件,如果你前面创建项目的时候没有选择语言,就不会出现它,大部分时候我们是用不到它的:
然后我们就可以在main
函数里面写一些代码,感受一下Qtcreator
的操作:
#include <QCoreApplication>
#include<QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
for(int i=0;i<100;i++){
qDebug()<<i;
}
return a.exec();
}
我这里删除了那些无关紧要的代码与头文件。
上面的代码中,我只写了一个for
循环,但不同于以前是使用cout
输出,而是使用的qDebug()
进行输出。
它是Qt里面最常用的打印工具,如其名字,主要用于调试,打印相关信息,便于我们排查错误。
无论是控制台还是图形界面程序都可以使用它,而cout
仅仅只是输出信息到控制台,其它地方无法使用
相比较而言,Qt提供的这个工具无疑强大了很多,它在头文件QDebug
中,在Qt编程中是非常常见的。
更深层次的原因可能在于,Qt默认使用的是更加通用的UTF-8编程,而
cout
这种只能输出ANSI编码,很多时候打印出来还是乱码,所以在Qt中最好都使用qDebug
。
然后编译运行:
这里有两个三角形的按钮,上面那个为直接编译运行,下面这个为编译后调试运行,而最下方的锤子,则是只编译,不运行,编译的另一个说法为构建。
然后直接点击运行,就会开始编译,并运行,但你会发现此时并不会弹出黑窗口:
这是Qt接管了控制台,可以更加方便我们看到输出信息,
但此时程序并没有停止运行,当你叉掉这个小框时,就会弹出提示,强制退出即可。
还需要注意的就是上面的这个调整生成项的框:
目前时Debug
,调试,但你可以更改为发布版本,再重新点击生成即可。
然后我们就来找找看这个生成的exe
程序
进入build
文件夹,可以看到有两个文件夹,分别是生成的调试与发布版本程序。
进入发布版的release
文件夹中,我们就可以看到生成的程序了!
但你直接点击运行,会报错,缺少动态库:
因为Qt都是采用的动态库进行发布的,而qt的动态库并没有在系统目录中,所以并不能像MFC那样可以直接点击即使用。
这个时候最好的办法就是找到对应的动态库,然后复制过来一份,与应用程序同一个文件夹即可运行。
但Qt的安装包很大,找这些动态库并不好找,所以这就需要另外一个工具,Qt打包的工具,可以快速帮我们复制过来所有需要的动态库与文件:
注意,如果你使用的其它构建套件,就需要在其它相应的文件夹中找这个软件。
使用这个软件的方法很简单,就是将这个目录,添加到控制台的临时环境变量环境,然后就可以使用这个程序了。
复制上面的路径,然后来到对应的发布文件夹.exe
中,输入cmd
快速在控制台中进入这个文件夹
然后输入下面这个命令,注意前面固定为set PATH=%PATH%;
,后面是前面的程序路径,比如我的路径就是C:\Qt\6.5.3\msvc2019_64\bin
set PATH=%PATH%;D:\Qt\6.5.3\msvc2019_64\bin
上面这句命令的意思就是,在PATH
变量后面,添加一个我们的路径,PATH
变量为系统寻找文件的变量,前面我在系统变量中介绍过,不理解的可以查看本章的另一篇文章:程序员必懂的常识。
这只是添加的临时环境变量,因为如果直接其添加到系统变量里面,会有点不好,如果你有其它构建套件,而每个构建套件中的程序名字都相同,就会乱套,这里涉及的语法为win批处理命令,更多介绍可以查看本教程系列的最后一章。
这样我们就可以在这个文件夹中,调用那个程序:
命令为:
windeployqt test.exe
注意其后的参数为我们生成应用程序,并且只有release
生成的版本才可以正常使用,如果你是debug
版本的程序,就会有问题。
然后回到文件夹中,我们就能看到自动复制过来的文件:
现在点击运行,就能够正常运行了!
5.json库使用
安装了Qt库之后,我们就可以很方便的使用Qt自带的各种各样的强大类库,比如操作json
的类库,qt也自带了一套。
这也刚好让我们熟悉一下Qt的使用流程。
首先我们呢还是需要简单探究一下json
格式本身。
一般,一个json
格式的文件,整体来看,一般来说,要么是一个数组,要么就是一个对象。