QT框架简介

  • Post author:
  • Post category:其他


刚开始接触QT开发的时候用的是Qt 5.6.0版本,开发过程中没有仔细了解过Qt具体的框架结构,只负责项目相关模块用C++进行开发和维护,对QT本身没有关注,只是当成一个开发工具而已。随着维护的内容深入,发现来对整个项目缺乏全面的了解,不知道为什么项目这么搭建为什么分这些模块,所以很有必要先了解Qt里边的框架结构。

打开QT工具,找到“帮助”选项,这里边可以查询到很多qt的基本信息,在开发过程中有时候遇到一些接口问题也可以在这里找到例子,非常方便。这里先了解一下模块划分。

在“Look for”的搜索框输入all Modules查看模块组成。

在“Contents”栏可以看到有5个模块组成。


Qt Essentials(基本模块)

Qt Add-Ons(扩展模块)

Value-Add Modules(增值模块)

Technology Preview Modules(技术预览模块)

Qt Tools    (Qt工具)

基本模块:

Module

Description

Qt Core

其它模块使用的核心非图形类,提供了元对象系统、对象树、信号槽、线程、输入输出、资源系统、容器、动画框架、JSON 支持、状态机框架、插件系统、事件系统等等所有基础功能

Qt GUI

图形用户界面(GUI)组件的基类。包括OpenGL。

Qt Multimedia

用于多媒体开发的音频、视频、无线和相机功能

Qt Multimedia Widgets

用于实现多媒体功能的基于小部件的类。

Qt Network

网络模块

Qt QML

QML和javascript解析引擎

Qt Quick

基于上述语言的现代界面和功能开发框架

Qt Quick Controls

用于开发具有传统桌面风格的qml控件

Qt Quick Dialogs

用于从Qt Quick应用程序创建系统对话框并与之交互的类型。

Qt Quick Layouts

用于qml界面开发的布局工具

Qt SQL

数据库模块

Qt Test

测试模块

Qt Widgets

基于widget的GUI开发控件

基本模块框架图:

参考:

https://blog.csdn.net/tennysonsky/article/details/46553663

对于整个框架,大家可以理解为下层模块为上层模块提供支持,或者说上层模块包含下层模块的功能。举个例子,例如 QtWebKit 模块,它既有图形界面部件也支持网络功能,还支持多媒体应用。 其中QtTest和QtSql是相互独立的模块。

图形界面库框架

这个图里面包含Qt GUI以及Qt Widget的部分组成,其中蓝色块表示包含在GUI模块中的,可以参考一下上图中的Qt GUI模块的功能描述,并不包含所有的显示部分,想要仔细了解可以查阅帮助文档。

从这里也可以更加直观的看到两个不同的UI体系是怎么架构起来的。它们被分为了两类,一类以 OpenGL 为核心,它是现在最新的 QtQuick2 和 QtWebkit 的基础;一类是以辅助访问和输入方式为基础的一般图形显示类,它们是经典 QWidget 部件类和 QtQuick1 的基础。

QtQml和QtQuick框架

Qt 5 中将QtQuick 分为了两大部分:

QtQml:提供了一个 QML 语言框架,定义并实现了语言引擎基础,还提供了便于开发者使用的 API,实现使用自定义类型来扩展 QML 语言以及将 JavaScript 和 C++ 集成到 QML 代码中。

QtQuick:是一个用于编写 QML 程序的标准库,它提供了使用 QML 创建用户界面程序时需要的所有基本类型。

可以看到 QtQml 和 QtQuick 是独立的两部分:

QtQml 以 QtCore 为基础,拥有 QtNetwork 的相关功能,然后搭建在了 V8 和 V4 两个 JavaScript 引擎上。

QtQuick 以 QPA 为基础,而后经过了 QtGui、OpenGL 和 Scene graph 三层封装,这里可以看到,新的 QtQuick 是建立在 OpenGL 之上的,并且使用了新的 Scene graph 进行图形渲染。很明显,QtQuick 就是用于图形显示的。

通过对比Quick1(QT5之前)和Quick2(QT5)可以了解到Quick2的功能更加强大了,有很多立体图(3D)效果都是在QT5的基础上实现的。

参考:


https://blog.csdn.net/tennysonsky/article/details/46553663



版权声明:本文为yj_android_develop原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。