20. Qt安装与JSON/XML库使用教程

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的官网:

image.png

或者直接点击这里进入官网,然后点击右上角的下载:

image.png

注意,操作中途可能需要你注册账户,自己注册一个即可,不过要记住自己的账户名与密码,因为后面会使用。

然后选择下载开源版的:

image.png

滑到页面下方,选择下载Qt在线安装:

image.png

然后点击下载即可:

image.png

下载完成后是一个.exe的文件,它并不是qt,而是用于下载Qt的一个下载器,由于其国内下载qt速度可能很慢,所以推荐使用镜像下载。

方法就是通过命令行启动该下载器:

.\qt-online-installer-windows-x64-4.8.0.exe --mirror https://mirrors.ustc.edu.cn/qtproject/

第一步就是登录Qt账户,如果你前面没有注册,那可以在这里进行注册,然后登录:

image.png

然后是开源协议,这种对于我们个人开发者而言基本不用考虑,直接跳过下一步即可

image.png

然后一直点击下一步,开始获取Qt数据了。

获取完成后,让你选择是否发送数据给云端,这两个,选谁都可以,然后继续下一步:

image.png

然后自己选择安装的文件路径,以及选择下面的第一个自定义安装,然后下一步:

image.png

这里先选择旁边的Latest supported release,即:最新支持的发行版本

以前是有一个LTS选项的,为长期支持版本,不清楚什么原因被取消了,长期支持版本会更加的稳定,不存在出现了什么bug,就不再修复的问题。

所以作为正常开发来说,我们一般会选择下载长期支持的版本,即带有LTSLong Term Support缩写)字眼的。

目前最新的长期支持版本为6.5

这里看不到,要从qt官网的博客才能看到,感兴趣的可以去看看:Qt Blog

所以这里我就直接下载6.5版本的了:

image.png

注意内部组件的勾选,当然如果你磁盘很大的话,可以全选,不用管这一步。

我这里去除了一些新手前期基本使用不到的东西,可以减少磁盘消耗以及下载时间,以后有需要的时候再下载即可。

然后点击下一步:

image.png

然后就是静待它安装成功了。

3.了解Qt结构

在正式写代码前,我们还是有必要了解一下我们上面都安装了些什么东西对吧!

首先来到我们的Qt安装目录,我安装在了:C:\Qt

image.png

首先我们要注意的就是这个MainTenanceTool.exe程序,因为它可以用来给Qt组件升级或者添加移除其它组件的。

点击它就能看到其界面与安装Qt的程序很类似。

然后我们还需要注意的是这里:

image.png

这个文件夹里面存放的就是编译套件,由于前面安装中我只选择了msvc这个编译套件,所以这里只有这一个,如果你全部安装,就会有多个编译套件。

不过对于我们目前而言,一般只用的上这个,即msvc(Microsoft VC++)2019,我们使用的VS2019中的C++开发环境。

实际上vs2022也可以正常使用,因为后面开发我将使用VS来进行Qt程序的开发。

至于原因相信你们很快就会明悟:那就是习惯了VS的程序员,实在难以习惯Qt自带的IDE环境。

Qt自带的IDE环境实际上就是安装完成后打开的那个Qt creator程序。

然后我们再来看看这个编译套件文件夹里面的一些重要程序:

image.png

首先是帮助程序,你在Qt中所使用的所有类,都可以通过这个程序寻找到帮助:

image-20231011110422116

不过是全英文的,如果看不懂就翻译翻译好了,而且这些都写的很简略。

如果想要系统学习的话,还是得自己去网上搜一搜看有没有博主写过相关的教程,学起来就会容易很多。

然后是设计软件界面的程序:

image.png

这个程序就相当于我们在MFC里面拖控件的功能,只不过Qt分离了出来,后面再具体讲解。

然后是语言翻译软件:

image.png

如果你想要做一个国际化的软件,那么软件语言就是一个大问题,而Qt就是通过这个程序来解决这一问题。

最后就是Qt中的IDE

image.png

它和VS一样,用于简化我们程序员的工作,可以直接在这个软件里面码代码、编译以及运行程序等等。

至于其它文件,很多都是Qt自带的辅助软件中使用到的资源文件,我们不用管。

也就是说,一般我们对于Qt,只用的到上面介绍的4个软件,这个我们心里得有个概念。

事实上,这样启动它们是很繁琐的,并且也没必要。

因为一般安装完Qt之后,这几个程序的快捷方式就都默认的加载到了开始菜单中,可以快速找到:

image.png

然后由于我们一般用不着语言翻译,就变成了三个,等到后面我们使用VS代替Qtcreator,就只用得上两个而已。

4.Qt creator的使用

虽说我并不准备在以后编程中使用这个Qt自带的IDE,但大家第一次接触,还是要学会使用这个自带的IDE,因为自带IDE的Bug会少很多。

而使用VS,可能你就会遇到各种奇奇怪怪的问题,如果对Qt以及VS没有一定的了解,就很难解决这些问题。

所以还是先从Qtcreator出发,等到后面我们再讲解VS中如何使用Qt。

启动qt creator之后,我们就能看到下面这个界面:

image.png

对于一个IDE而言,第一步肯定是如何创建项目以及打开项目,就是上图的两个按钮,分别用于创建Qt项目以及打开Qt项目。

4.1 项目创建

首先看到创建项目:

image.png

这里首先第一栏是选择项目,对于我们用C++开发桌面程序而言,选择第一个即可。

然后第二栏,为了更加直观的了解Qt,当然就是创建控制台程序了,然后点击选择。

首先是选择项目的名称,以及项目存放的路径:

image-20231011111246411

然后是构建系统,既然是qt,一般就用qmake即可,这是稍微麻烦一点的东西,后面有时间会出专门的文章对其介绍:

image-20231011111337524

来到下一步,选择语言,如果你并不打算国际使用,这一步同样可以忽略:

image-20231011111439212

我这里为了演示后面的代码,所以就选择了一个中文。

然后是选择该项目的构建工具,这里我就直接选择msvc2019了:

image-20231011111526271

然后是添加版本控制,这个是git相关的知识点,有兴趣的可以查看文章git详解,这里不用管:

image-20231011111618982

汇总不用管,直接点击完成,就可以看到出现了下面的东西:

image-20231011111707348

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中的信号与槽的概念,后面很快会讲到。

然后我们再来看一看旁边生成的文件:

image-20231011112007913

这里着重需要注意的是,这个pro后缀的文件,这是Qt中的项目文件,由于Qt中并没有解决方案这个概念,它就相当于VS中某个具体项目的项目组织文件:

image.png

Qt以及VS就是通过项目文件,知道这个项目中包含了哪些文件,以及一些设置选项。

而打开项目,其实就是打开这个文件,Qt通过解析这个文件就能知道你这个项目上一次的情况

由于VS与Qt的项目文件格式并不相同,所以并不能互相通用,相比较而言,Qt的项目文件处理起来会比较麻烦:

image-20231011112112541

直接双击这个文件就可以直接打开,Qt项目文件并不能像VS那样智能,很多东西我们都必须自己手动操作

Qt的项目文件,除了添加源文件与头文件,会自动添加到项目文件外,其它的配置如果想要更改,基本都需要自己手动写入这个项目文件中。

比如CONFIG += c++17 cmdline,代表配置为C++17标准,以及控制台项目,如果你想要使用C++14标准,在Qt里面就直接更改这个字符串即可。

更多的配置项可以在自己有需要的时候,浏览器搜索如何使用即可。

而下面的ts后缀的文件,是语言相关的文件,如果你前面创建项目的时候没有选择语言,就不会出现它,大部分时候我们是用不到它的:

image-20231011112239093

然后我们就可以在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

然后编译运行:

image.png

这里有两个三角形的按钮,上面那个为直接编译运行,下面这个为编译后调试运行,而最下方的锤子,则是只编译,不运行,编译的另一个说法为构建。

然后直接点击运行,就会开始编译,并运行,但你会发现此时并不会弹出黑窗口:

image.png

这是Qt接管了控制台,可以更加方便我们看到输出信息,

image.png

但此时程序并没有停止运行,当你叉掉这个小框时,就会弹出提示,强制退出即可。

还需要注意的就是上面的这个调整生成项的框:

image.png

目前时Debug,调试,但你可以更改为发布版本,再重新点击生成即可。

然后我们就来找找看这个生成的exe程序

image.png

进入build文件夹,可以看到有两个文件夹,分别是生成的调试与发布版本程序。

进入发布版的release文件夹中,我们就可以看到生成的程序了!

image.png

但你直接点击运行,会报错,缺少动态库:

image-20231011113007895

因为Qt都是采用的动态库进行发布的,而qt的动态库并没有在系统目录中,所以并不能像MFC那样可以直接点击即使用。

这个时候最好的办法就是找到对应的动态库,然后复制过来一份,与应用程序同一个文件夹即可运行。

但Qt的安装包很大,找这些动态库并不好找,所以这就需要另外一个工具,Qt打包的工具,可以快速帮我们复制过来所有需要的动态库与文件:

image.png

注意,如果你使用的其它构建套件,就需要在其它相应的文件夹中找这个软件。

使用这个软件的方法很简单,就是将这个目录,添加到控制台的临时环境变量环境,然后就可以使用这个程序了。

复制上面的路径,然后来到对应的发布文件夹.exe中,输入cmd快速在控制台中进入这个文件夹

image-20231011113204964

然后输入下面这个命令,注意前面固定为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批处理命令,更多介绍可以查看本教程系列的最后一章。

这样我们就可以在这个文件夹中,调用那个程序:

image.png

命令为:

windeployqt test.exe

注意其后的参数为我们生成应用程序,并且只有release生成的版本才可以正常使用,如果你是debug版本的程序,就会有问题。

然后回到文件夹中,我们就能看到自动复制过来的文件:

image.png 现在点击运行,就能够正常运行了!

image-20231011121426847

5.json库使用

安装了Qt库之后,我们就可以很方便的使用Qt自带的各种各样的强大类库,比如操作json的类库,qt也自带了一套。

这也刚好让我们熟悉一下Qt的使用流程。

首先我们呢还是需要简单探究一下json格式本身。

一般,一个json格式的文件,整体来看,一般来说,要么是一个数组,要么就是一个对象。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux