Qt 6之四:基础概念讲解

Qt 6之四:基础概念讲解

Qt是一种跨平台的C++应用程序开发框架,它提供了一套丰富的工具和库,可以帮助开发者快速构建跨平台的应用程序,用于开发图形用户界面(GUI)和非GUI应用程序。

Qt 6之一:简介、安装与简单使用 https://blog.csdn.net/cnds123/article/details/130730203

Qt 6之二:项目的结构、资源文件的使用https://blog.csdn.net/cnds123/article/details/130741807

Qt 6之三: 项目的发布 https://blog.csdn.net/cnds123/article/details/130827966

Qt Creator是一个跨平台的集成开发环境(IDE),主要用于Qt应用程序开发。

Qt C++和标准C++之间的关系

Qt C++是基于标准C++的框架,它提供了许多额外的功能和库,或者说,Qt C++是对标准C++的一种扩展和增强,专门针对图形用户界面和跨平台应用程序的开发。它提供了一系列工具和库,使得开发这类应用程序更加高效。Qt C++的代码最终仍然是标准C++代码,并且可以与标准C++代码无缝集成。通过使用MOC和其他Qt特有的构建工具,Qt C++能够提供一些标准C++所没有的特性,如信号和槽机制。尽管如此,Qt仍然保持了对标准C++的兼容性,允许开发者利用标准C++的强大功能。

Qt C++和标准C++之间的关系可以从几个不同的角度来理解:

语言基础

Qt C++是建立在标准C++之上的。它使用标准C++作为其编程语言的基础,并且Qt代码最终是由C++编译器编译的。这意味着Qt开发者可以使用标准C++的所有特性,包括基本数据类型、控制结构、标准库等。

扩展和工具

Qt框架扩展了标准C++,提供了一系列额外的功能和工具,以支持图形用户界面(GUI)开发、跨平台应用程序的创建、网络编程等。这些扩展包括:

  • 一套丰富的用户界面组件(Qt Widgets)
  • 一个元对象系统,包括信号和槽机制,用于对象之间的通信
  • 一套跨平台的API,用于处理文件系统、线程、网络、数据库等
  • 一个国际化工具,支持多语言翻译
  • QML,一种声明式语言,用于设计动态用户界面
  • 附加的工具和库,如Qt Designer(界面设计工具)、Qt Creator(集成开发环境)

元对象编译器(MOC

Qt引入了一个称为元对象编译器(MOC)的工具,它是一个预处理器,用于处理Qt特有的一些关键字和宏,如Q_OBJECT宏、slots、signals等。MOC生成标准C++代码,这些代码随后与应用程序的其他代码一起被编译。这是Qt C++与标准C++之间的一个主要区别,因为标准C++没有这种预处理步骤。

兼容性

尽管Qt C++在标准C++之上增加了许多功能,但它仍然致力于与标准C++保持良好的兼容性。Qt开发者可以在Qt项目中自由地使用标准C++库(如STL)和第三方C++库。然而,Qt自己的数据结构和工具(如QString、QVector等)通常与标准库中的类似工具更好地集成。

由于 Qt 对 标准C++ 进行了扩展,增加了像signal/slot(信号/槽)的通信机制、属性系统等一些 新的功能,所以在Qt应用程序中的一些代码不能直接使用标准C++编译器进行编译,需要先将其 转换成标准C++兼容的形式。与 标准的C++应用程序 相比较,Qt应用主要有如下特点:

Qt的元对象编译器(Meta-Object Compiler,MOC)是一个预处理器,在源程序被编译前先将具有Qt特性的程序转换为标准C++兼容的形式,然后再由标准C++编译器进行编译与链接。

Qt应用程序是由多个不同类型的文件组成的,包括:项目文件(.pro)、类文件(.h和.cpp) 以及界面文件(.ui),还包括实现元对象系统(Meta – Object System) 特性的MOC预处理文件(moc_*.h、moc_*.cpp和moc_*.o) 以及资源文件(.qrc)等。

这些文件分别实现不同的功能,最后由标准C++编译器将它们编译、链接成一个整体。

Qt Creator的构建系统(Build system)概述

Qt Creator支持多种构建系统(Build system),每种构建系统都有其特点和用法。

不同构建系统的配置文件:

Qmake的是.pro文件(应用程序名称.pro)

CMake的是CMakeLists.txt文件,目前新版 Qt Creator10 默认使用这个

Qbs的是. qbs文件(应用程序名称. qbs)

【qmake官方文档https://doc.qt.io/qt-5/qmake-manual.html

CMake官方文档https://cmake.org/cmake/help/latest/

Qbs官方文档:https://doc.qt.io/qbs/

以下是构建系统的概述:

QMake

QMake是Qt的传统构建系统,它使用简单的.pro(项目)和.pri(包含)文件来定义项目的构建过程。

特点:

  • 紧密集成于Qt。
  • 简单易学,适合小到中等规模的项目。
  • 自动生成Makefile,跨平台支持良好。

用法:

  1. 创建.pro文件,定义项目中的文件、库依赖和其他构建参数。
  2. 在Qt Creator中打开.pro文件,IDE将自动处理构建配置。
  3. 使用Qt Creator的构建、运行和调试功能来开发应用程序。

一个简单的 .pro 文件可能如下所示:

SOURCES += main.cpp MyWidget.cpp

HEADERS += MyWidget.h

QT += widgets

在 Qt Creator 中,打开 .pro 文件会自动识别为一个 QMake 项目。你可以在项目设置中修改构建目录、编译器选项等。需要注意的是新版本Qt Creator如 10.0.1 版本不再在新建项目时提供 QMake 选项。

CMake

CMake是一个开源的跨平台构建系统,它使用CMakeLists.txt文件来定义构建过程。

特点:

  • 支持复杂的项目结构和大型项目。
  • 强大的模块和脚本支持。
  • 跨平台生成原生构建文件,如Makefile、Ninja、Visual Studio项目等。

用法:

  1. 创建CMakeLists.txt文件,使用CMake命令来定义项目构建规则。
  2. 在Qt Creator中打开项目,指定CMake为构建系统。
  3. 使用Qt Creator的构建、运行和调试功能来开发应用程序。

一个简单的 CMakeLists.txt 文件可能如下所示:

cmake_minimum_required(VERSION 3.5)

project(MyApp VERSION 1.0)

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED True)

add_executable(MyApp main.cpp)

在 Qt Creator 中,打开 CMakeLists.txt 文件会自动识别为一个 CMake 项目。你可以在项目设置中修改构建目录、CMake 生成器等

Qbs

QbsQbs(Qt Build System)是一个新的构建工具,由Qt开发,用于替代QMake。

特点:

  • 基于规则的配置,更现代和灵活。
  • 跨平台,支持并行构建和增量构建。
  • 集成了Qt模块和其他工具链。

用法:

  1. 创建.qbs文件,定义项目构建逻辑和依赖关系。
  2. 在Qt Creator中选择Qbs作为构建系统。
  3. 配置构建设置,并使用Qt Creator的功能进行开发。

一个简单的 .qbs 文件可能如下所示:

Project {

  name: "MyApp"

  files: "main.cpp"

  Depends { name: "cpp" }

}

在 Qt Creator 中,打开 .qbs 文件会自动识别为一个 Qbs 项目。你可以在项目设置中修改构建目录、编译器选项等。

对于Qt Creator支持的构建系统,Qt Creator会自动生成相应的构建配置文件,如.pro文件(qmake)、CMakeLists.txt文件(CMake)等。你可以直接在Qt Creator中编辑这些文件,或者使用外部编辑器进行修改。在大多数情况下,这些文件在项目的初次创建时会被自动生成,且在大部分时间里,你可能不需要手动修改这些文件。这是因为Qt Creator提供了一种图形化的方式来管理这些设置,比如通过项目属性页面来添加或删除源文件和库,设置编译器标志等。这些更改会自动反映在构建配置文件中。注意,在对构建配置文件进行更改后,应该测试构建过程,确保一切按预期工作。

Qt创建 C++ GUI 应用程序方法概述

在 Qt 中,创建 C++ GUI 应用程序主要有两种方法:

1、使用Qt工具

☆若使用Qt Widgets,您可以使用Qt Creator中的设计师(Designer)来可视化设计和排列控件,然后使用C++代码编写逻辑。

☆若使用Qt Quick,您可以使用Qt Creator中的Qt Quick Designer来可视化设计和布局QML界面,然后使用C++代码编写逻辑。

☆若使用Qt Quick Controls 2,您可以使用Qt Creator中的Qt Quick Designer和Qt Quick Controls Gallery来可视化设计和排列控件,然后使用C++代码编写逻辑。

Qt Widgets、Qt Quick和Qt Quick Controls 2是Qt框架中不同的UI模块(组件集合),用于创建不同类型的用户界面。

Qt Widgets是Qt框架中的一组类集合,它们代表了各种GUI元素,如按钮、滑块、文本框等,适用于创建传统的桌面应用程序。

Qt Quick是基于QML的一种现代的、动态的用户界面技术。它提供了一种描述性的语言和一套UI组件,可以创建富有动感的、流畅的用户界面。并且,Qt Quick Controls 2是Qt Quick的一部分,提供了一套现代化的、风格一致的UI控件,如按钮、滑块、对话框等。

Qt Designer、Qt Quick Designer和Qt Quick Controls Gallery是Qt Creator内置的工具。

Qt Designer:它是用于创建和编辑基于Qt Widgets的用户界面的可视化工具。您可以直观地在设计界面上拖放和排列控件,设置控件的属性,以及编辑控件的信号和槽等事件响应函数。此工具非常适合开发传统的、基于窗口的桌面应用程序。

Qt Quick Designer:这是一个用于创建和编辑基于Qt Quick的用户界面的可视化工具。与Qt Designer类似,您可以在设计界面上拖放和排列控件,设置控件的属性,以及编辑控件的事件响应函数。此工具非常适合开发动态的、响应式的、基于QML的应用程序。

Qt Quick Controls Gallery:这是一个展示Qt Quick Controls 2中所有控件和样式的应用程序。您可以运行它来查看和测试各种控件和样式,以选择最适合您的应用程序的控件和样式。此工具可以帮助您更好地了解和使用Qt Quick Controls 2。

另外,Qt Design Studio是一个独立的、强大的UI设计和开发工具,它可以创建基于Qt Quick和Qt Quick Controls 2的用户界面。Qt Design Studio也支持导入Photoshop和Sketch等设计工具的原型,使得设计师和开发者可以更好地协作。

2、手动编写代码:通过完全手工编程方式创建 GUI 应用程序,您可以使用 Qt框架中 的 QWidgets 、Qt Quick和Qt Quick Controls 2 Qt模块,直接在 C++ 代码中创建和操作 GUI 组件。这种方法需要您熟悉 Qt 的类和 API,并逐个编写 GUI 组件的代码。虽然这种方法可以提供更灵活的控制和更高的定制化程度,但它需要更多的时间和精力来编写和维护代码。

Qt交互和通信方式概述

Qt框架提供了多种方式来实现对象之间的交互和通信。以下是一些主要的机制:

  1. 信号和槽(Signals and Slots:
    • 这是Qt中最强大的通信机制,也是Qt对象之间交互的核心。
    • 信号是由对象发出的消息,表明发生了某个事件或者状态的改变。
    • 槽是可以响应信号的函数,可以是普通的成员函数、静态函数或lambda表达式。
    • 当一个信号被发射时,连接到这个信号的所有槽都会被调用。
    • 使用QObject::connect()函数来建立信号和槽之间的连接。
  2. 事件处理(Event Handling:
    • Qt中几乎所有的用户界面事件,如鼠标点击、按键按下等,都是通过事件系统来处理的。
    • 事件是QEvent类的实例,它包含了事件的所有相关信息。
    • 事件通过事件循环分发给相应的对象,并由对象的event()函数处理。
    • 你可以通过重写event()函数或更具体的事件处理函数(如mousePressEvent()、keyPressEvent()等)来自定义事件的处理。
  3. 远程对象通信(Inter-Process Communication, IPC:
    • Qt提供了多种IPC机制,包括但不限于:
    • DBus: 适用于Unix-like系统的IPC机制。
    • TCP/UDP Sockets: 网络通信的基础,Qt通过QTcpSocket、QUdpSocket等类提供了对套接字编程的支持。
    • Shared Memory: 允许不同进程访问同一块内存区域。
    • Pipes: 传统的IPC机制,Qt通过QProcess类支持管道通信。
  4. 多线程(Threading:
    • Qt支持多线程编程,可以通过继承QThread类或使用QtConcurrent模块来实现。
    • 通过线程,你可以执行长时间运行的任务而不阻塞主线程,保持用户界面的响应性。
    • Qt提供了线程安全的信号和槽连接,可以安全地在不同线程之间发送信号。
  5. 定时器(Timers:
    • 定时器可以在特定的时间间隔后发出信号,这可以用来触发周期性的事件,如定时更新UI或者检查某个条件是否满足。Qt提供了多种定时器工具,如QTimer、QElapsedTimer等,允许开发者定时执行特定任务,如更新界面、处理数据等。定时器可以用于实现动画效果、任务调度等功能。

以上是Qt中常用的交互和通信方式的概述。根据应用程序的需求和场景,你可以选择适合的方式来实现组件之间的交互和数据传输。

Qt6.2模块概述

Qt具有丰富的API,Qt包括多达数百多个C++类,除了用于用户界面开发,还可用于文件操作、数据库处理、2D/3D图形渲染、多媒体操作和网络通信等。Qt类库中的类是以模块方式进行组织和管理的,版本不同其模块数量、各个模块中包含的类都会不一样。Qt 6.2的模块被分成了 Qt Essentials(基本模块)和 Qt Add-Ons(附加模块) 两大类。

Qt 6.2发布于2021年,本文介绍是Qt 6.2中一些模块的概述。

Qt中的附加模块实现一些特定的目的,它们可能只针对某些开发平台,或只能用于某些操作系统,或只是为了向后兼容:

下一讲,Qt 6之五:创建菜单 https://blog.csdn.net/cnds123/article/details/135440934

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值