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
仅仅只是输出信息到控制台,其它地方无法使用