Qt简介和环境搭建

Qt是一个流行的使用C++语言开发的跨平台图形界面应用程序开发框架。在我们经常使用的许多桌面软件程序中,有很多都是基于Qt框架开发的,其中最著名的就是Linux桌面环境KDE,目前也是即将发布基于Qt6的KDE Plasma 6。Qt有基于LGPL协议的免费版本,也有商业版本。这里我们使用的主要目的是开发开源软件,因此使用的是社区版。Qt的安装包内包含开发Qt程序使用的IDE(Qt Creator,包含界面设计器、C++文本编辑器、帮助文档),Qt使用的相关工具链,Qt的各种库等。

目前Qt的两个主要版本是Qt5和Qt6,本系列笔记基于最新的Qt6.6和MSVC编译器进行介绍,虽然Visual Studio也有插件可以支持Qt程序开发,但是这里还是选择比较简单方便的Qt Creator作为开发的IDE工具。

官方网站:https://www.qt.io/

安装Qt

我们可以在Qt的官方网站找到Qt的社区版安装包,这里注意从Qt6开始,Qt的社区版就不再支持离线安装了,我们只能使用Online Installer在线安装,但这个安装器在国内是几乎无法使用的,一种简单的解决方法是使用国内镜像。

USTC的Qt镜像:https://mirrors.tuna.tsinghua.edu.cn/help/qt/

我们需要使用以下命令执行安装器。

# Linux
installer --mirror https://mirrors.tuna.tsinghua.edu.cn/qt
# Windows
installer.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt

执行安装器后,我们根据提示选择需要的组件安装即可,这一步即使没安装全也没关系,后续我们依然可以使用Qt的MaintenanceTool维护安装的组件。

Qt功能模块

Qt并不仅仅是一个C++下的GUI框架,它是一个完整的应用程序开发框架(这也是本系列笔记独立于C/C++章节的原因),Qt包含字符串、容器、多媒体、多线程、网络、数据库、JSON/XML处理等诸多功能,而且有良好的文档可供参考,用它来开发各种应用程序十分便捷,以下是Qt中一些常用的库简介。

Qt Core:提供了基础的类和函数,如字符串、容器、事件循环、线程、文件操作等

Qt GUI:提供了图形用户界面的基础类,如窗口、控件、字体、图像、画笔、画布等

Qt Widgets:提供了一套基于Qt GUI的传统的桌面风格的控件

Qt Multimedia:提供了一套多媒体编程接口,用于播放、录制、处理音频和视频

Qt Network:提供了一套网络编程接口,用于实现TCP、UDP、HTTP等协议的客户端和服务器

Qt SQL:提供了一套数据库编程接口,用于访问多种关系型数据库

此外关于Qt Quick将单独分出一组笔记进行介绍,我们这里后续主要介绍基于Qt Widgets的开发。

Hello,world!

下面我们编写一个最简单的Qt程序,界面上有一个按钮,点击按钮后窗口关闭程序退出。在这个例子中,我们创建一个空项目hello,然后添加一个源文件main.cpp

为了使用Qt Widgets,我们需要首先在CMakeLists.txt文件中引入我们需要的模块Widgets。这样做后,CMake在生成Makefile时会自动添加Qt Widgets相关的动态链接库编译命令。如果使用Qt Creator,其实我们不必太过关心程序具体的编译和构建过程,IDE会自动维护CMake脚本,有关CMake的更多内容,将在CMake相关章节介绍。

CMakeLists.txt

find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

补充:

  1. 在Qt5中,Qt的构建工具是QMake,但在Qt6中推荐使用更具通用性的CMake,然而它也更加的复杂和难用。
  2. 如果直接创建Qt Widgets工程,Widgets模块会自动添加。

编写界面的C++代码如下。

main.cpp

#include <QApplication>
#include <QPushButton>
#include <QWidget>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    //主窗口
    QWidget w;
    //创建一个按钮
    QPushButton button("点击我关闭窗口", &w);
    //使用connect函数,连接按钮的点击事件和窗口的关闭动作
    QObject::connect(&button, &QPushButton::clicked, &w, &QWidget::close);
    //显示主窗口
    w.show();

    return app.exec();
}

上面代码中,我们在main函数的栈上创建了QApplicationQPushButton这两个对象,然后使用Qt的信号槽功能,将按钮的点击事件和主窗口的退出功能对接,这样点击按钮,程序就会退出。最后,调用app.exec()开启事件循环,这样我们的程序不会立即退出,而是一直运行着,等待用户的输入并作出响应。

运行结果:

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap