21.Qt界面开发与实战

1.前言

前面一章,我们简单学习了一下Qt库的使用,以及一个程序的开发流程:就是不停的调库。

这就是Qt之所以非常火的原因,因为其自带的库真的太多了,绝大多数时候都无需我们自己造轮子。

但除此之外,Qt另一个非常火的原因就是其界面的强大,前面我们使用MFC的时候可以看到,其实我们对界面的美化,能控制的范围相当有限,想要变成好看,非常难。

但Qt不一样,你可以非常容易的,将界面做的很好看,所以本章就将开始介绍Qt的界面开发流程。

2.创建项目

暂时我们还是使用qtcreator来开发Qt项目,虽然不好用,但好歹是官方自带的,得熟悉一下。

这次我们不再创建控制台项目了,而是要创建一个窗口项目:

image-20231011134752031

Qt Widgetswidget意为部件,因为在Qt里面,几乎所有东西都是部件,可以任意搭配缝合,窗口应用程序更是尤为突出。

然后随便取个项目名:

image-20231011134851881

依旧选择qmake

image-20231011134910604

这里注意一下,要选择QWidget,即创建最原始的部件窗口:

image-20231011134937224

它可以任意扩展为你想要的类型对话框,以后你熟悉了之后,当然也可以选择其它两种已经初始化好的对话框:

image-20231011134956378

  • QMainWIndows:一个所有部件都已经具备的窗口,比如状态栏,菜单栏等等,继承自QWidget
  • QDialog:对话框窗口,可以很方便弹出,继承自QWIdget

然后,这次我们就不选语言了:

image-20231011135017984

编译套件还是选择msvc

image-20231011135034150

汇总这里的版本控制系统也不需要,直接完成:

image-20231011135052571

然后我们就能看到自动生成的项目文件:

image-20231011135159525

这里你可能首先就会感到奇怪,明明是窗口程序,为啥是main函数?不应该是winMain函数吗?

这就是Qt的独到之处了,Qt将各种类型项目的差异性封装了起来,统一使用一个main函数!

当你的项目文件(.pro)中,没有添加CONFIG+=cmdline时,它就会链接对应的含有winMain函数的库,那个winMain才是真正的入口点,只不过在那个winMain函数里面,调用了我们这里的main函数。

所以不是没有使用winMain,而是它被隐藏了!

生成的文件之内的,我们也先不用管,直接点击运行一下试一试!

image-20231011135428497

与MFC一样,我们啥都没干,就可以生成一个窗口程序。

但相比较而言,你会发现Qt的代码非常简洁,文件很少,而MFC里面却是各种文件混杂,莫名其妙的代码一大堆。

这便是Qt的优势之处:简洁明了

3.文件与代码详解

首先来看,这个生成的项目中有哪些文件,都是干什么的:

image-20231011135527670

  1. main.cpp:程序源码,存放了入口函数代码。
  2. widget:主窗口类,包含widget.hwidget.cpp这两个文件,用于控制主窗口的行为。
  3. widget.ui:UI设计文件,和MFC类似,通过拖拽即可完成界面搭建。

然后我们来具体看一看文件中的代码,首先是main.cpp文件:

image-20231011135649108

代码相当简单,首先和前面控制台一样,也是声明了一个应用类,不过这个类名为QApplication,它是QCoreApplication的子类。

声明出对象后,然后调用exec函数进入消息循环:

    QApplication a(argc, argv);
    return a.exec();

只不过在中间,还实例化了一个窗口类,并调用show函数显示出来,这个操作学过win api界面编程的我们应该很清楚,其实就是在调用showwindow这个win API函数来显示窗口。