Qt 5框架介绍

该文章原创于Qter开源社区(www.qter.org),作者 yafeilinux,转载请注明出处!


一、在帮助中查看所有模块

打开 Qt Creator,进入其帮助模式,然后选择目录方式进行查看,打开 “Qt 5.2.0ReferenceDocumentation” 页面。在这里提供了Qt 5.2 的整体介绍,并将其所有内容进行了分类。我们选择右下角的 “All Qt Modules” 来查看所有的 Qt 模块。如下图所示。



在所有模块页面,将 Qt 的模块分为了三部分:Qt 基本模块(Qt Essentials)、Qt扩展模块(Qt Add-Ons)和 Qt 工具(Qt Tools)。



Qt 基本模块中包含了Qt核心基础的功能,这个我们会在后面详细讲解;


而 Qt 扩展模块包含了以前 QtMobility 中的一些与移动有关的模块,如蓝牙 QtBluetooth、传感器 QtSensors 等。还包含了以前 Qt 4 中的一些模块,例如 QtDBus、QtXML、QtScript 等。除此之外,还新添了一些模块,例如图形效果 QtGraphicalEffects、串口 Qt Serial Port、还有出现在商业版中的 Qt3D 等。这些模块都是有特殊用途的,它们很多需要在特殊的平台上才可使用。在扩展模块中我们也看到了 Qt Print Support 打印支持模块,它是以前很多类的重组模块;


在 Qt 工具中包含了 Qt 设计器、Qt 帮助和 Qt 界面工具三部分内容。


二、Qt基本模块框架

Qt 基本模块中定义了适用于所有平台的 Qt 基础功能,在大多数 Qt 应用程序中需要使用该模块中的提供的功能。Qt 基本模块的底层是 QtCore 模块,其他所有模块都依赖于该模块,这也是为什么我们总可以在 .pro 文件中看到 QT += core 的原因了。整个基本模块的框架如下图所示。



最底层的是 QtCore,它提供了元对象系统、对象树、信号槽、线程、输入输出、资源系统、容器、动画框架、JSON 支持、状态机框架、插件系统、事件系统等等所有基础功能。该模块的重要性不言而喻。在其之上,直接依赖于 QtCore 的是 QtTest、QtSql、QtNetwork 和 QtGui 四个模块,其中测试模块 QtTest 和数据库模块 QtSql 是相对独立的,而更加重要的是网络模块 QtNetwork 和图形模块 QtGui,在它们两个之上便是 Qt 5 的重要更新部分 QtQml 和 QtQuick。而最上层的是新添加的 QtMultiMedia 多媒体模块,和在其之上的 QtWebKit 模块。

对于整个框架,大家可以理解为下层模块为上层模块提供支持,或者说上层模块包含下层模块的功能。举个例子,例如 QtWebKit 模块,它既有图形界面部件也支持网络功能,还支持多媒体应用。对于其他模块,我们这里就不再深入介绍,下面主要来讲解一下其中最重要的 QtGui 模块。


三、图形界面库框架

现 实际上 QApplication 不在 QtGui 模块中了,其实不仅如此,就连所有用户界面的基类 QWidget 也不在 QtGui 模块中了,它们被重新组合到了一个新的模块 QtWidgets 中。Qt 5 的一个重大更改就是重新定义了 QtGui 模块,它不再是一个大而全的图形界面类库,而是为 GUI 图形用户界面组件提供基类,包括了窗口系统集成、事件处理、OpenGL 和 OpenGL ES 集成、2D 绘图、基本图像、字体和文本等内容。


在Qt 5中将以前 QtGui 模块中的图形部件类移动到了 QtWidgets 模块中,将打印相关类移动到了 Qt Print Support 模块中。不过 Qt 5 中去掉了 QtOpenGL 模块,而将 OpenGL 相关类移动到了 QtGui 模块中。有的读者可能发现在 Qt 扩展模块中依然有 QtOpenGL 模块,其实它只是为了便于 Qt 4 向 Qt 5 移植才保留的,在编写 Qt 5 程序时依然强烈推荐使用 QtGui 模块中的 OpenGL 类。了解了图形库的大体更改,下面我们来看一下 Qt 图形界面库的整体框架。如下图所示。



在各种支持的平台之上是底层的平台抽象层 QPA,这个就是被称作 LightHouse 的灯塔项目,它是 Qt 可以无处不在的基础。而在其上的所有蓝色组块都是 QtGui 模块的内容,它们被分为了两类,一类以 OpenGL 为核心,它是现在最新的 QtQuick2 和 QtWebkit 的基础;一类是以辅助访问和输入方式为基础的一般图形显示类,它们是经典 QWidget 部件类和 QtQuick1 的基础。


四、QtQml和QtQuick框架

如果要问 Qt 5 最大的更新和特色是什么,那非 QtQml 和 QtQuick 莫属。其实,在 Qt 4.7 的时候就已经有 QtQuick 了,不过它在那个时候并不成熟。只有到现在的 Qt 5,qml 和 quick 才发展壮大,逐渐规范起来,并且拥有了与 QWidget 平分秋色的地位。大家可能已经了解到,qml 和 quick 是为移动设备而生的,并且是今后 Qt 发展的方向。

QtQuick 在 Qt 4 中是这样定义的:Qt Quick 是一种高级用户界面技术,使用它可轻松地创建供移动和嵌入式设备使用的动态触摸式界面和轻量级应用程序。三种全新的技术共同构成了 Qt Quick 用户界面创建工具包:一个改进的 Qt Creator IDE、一种新增的简便易学的语言 ( QML ) 和一个新加入 Qt 库中名为 QtDeclarative 的模块,这些使得 Qt 更加便于不熟悉 C++ 的开发人员和设计人员使用。

不过在 Qt 5 中将以前的 QtQuick 分为了两大部分: 一部分是 QtQml,它提供了一个 QML 语言框架,定义并实现了语言引擎基础,还提供了便于开发者使用的 API,实现使用自定义类型来扩展 QML 语言以及将 JavaScript 和 C++ 集成到 QML 代码中。另一部分是新的 QtQuick,它是一个用于编写 QML 程序的标准库,它提供了使用 QML 创建用户界面程序时需要的所有基本类型。

在 Qt 5 中已经很明了地分离了 qml 和 quick,使得我们可以对这项新技术拥有更加清楚地认识。与其说这是一项新技术,不如说这是 Qt 创造的一个新的语言和类库,请允许在这里打个不太科学的比方:qml 就好比是 C++ 语言,那么 quick 就是 Qt 库,Qt 库是用 C++ 语言编写的一个类库,而 quick 就是用 qml 语言编写的一个类库,只不过在 qml 的世界里,没有类这个叫法而已。

QtQml 和 QtQuick 的框架如下图所示:



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

QtQml 以 QtCore 为基础,拥有 QtNetwork 的相关功能,然后搭建在了 V8 和 V4 两个 JavaScript 引擎上,V8 大家应该已经熟知了,而 V4 是一个轻量级的 JavaScript 引擎。不过这里需要提及一下,在最新的 Qt 5 版本中,V8 已经完全被一个新的 Qt 专有引擎代替了,原因是 V8 适用于浏览器却不太适用于 qml。我们也可以看到 QtQml 本身并没有涉及图形显示的内容;


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


本文转自:http://bbs.qter.org

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/52055.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt学习笔记(三十):Qt 中的绘图

一、QPainter:绘图对象 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于 QPainter,QPainterDevice 和 QPaintEngine 三个类。 QPainter 用来执行绘制的操作(相当于画家); QPain…

【Qt入门第16篇】 2D绘图(六)坐标系统

导语 前面一节我们讲解了图片的显示,其中很多地方都用到了坐标的变化。这一节我们将讲解Qt的坐标系统,分为两部分来讲解:第一部分主要讲解前面一节的那几个函数,它们分别是translate()平移变换、scale()比例变换、rotate()旋转变…

使用Qt进行程序开发的过程记录

目录 一、qt的安装 二、resources文件的使用 三、Qt中各种设置问题 四、在子页面的简单图表显示 五、Qt发布独立运行的exe的方法 六、Qt创建子页面的方法 七、Qt中使用菜单栏的方法 八、Qt联合C进行文件读取、写入操作 九、Qt关闭窗口函数 十、提示窗口与调试功能的使…

Qt开发技术:Qt绘图系统(二)QPainter详解

若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062 本文章博客地址:https://blog.csdn.net/qq21497936/article/…

Qt绘图与信号事件

Qt应用开发的基本模式(面向对象) 继承QDailog gkdialog.h #ifndef GK_DIALOG_H #define GK_DIALOG_H #include <QtWidgets/QDialog>class GKDialog: public QDialog{ public:GKDialog(QWidget *parent0);~GKDialog(); }; #endifgkdialog.cpp #include "gkdialog…

我的Qt作品(9)Qt使用Cairo绘图引擎提升抗锯齿效果【开源】

之前写了一篇文章《Qt使用GDI绘图&#xff08;仅Windows平台&#xff09;》 Qt使用GDI绘图&#xff08;仅Windows平台&#xff09;_libaineu2004的博客-CSDN博客 本篇重点介绍Cairo绘图引擎&#xff0c;Qt自带的QPainter的绘图效率和抗锯齿效果都没有cairo的好。cairo 的目标…

基于Qt的多媒体综合应用程序设计(2)

框架结构图等 1.多媒体综合应用程序设计思路 首先创建一个Qt Widgets Application程序,在头文件中完成类、函数及变量的设置,在程序窗口中添加相应的控件,利用控件的属性和方法分别实现文字处理程序跳转、绘图程序跳转、图像处理程序跳转、音频播放器跳转、视频播放器跳转和…

VS+Qt+鼠标框选后掩膜去除背景

前言&#xff1a; 实际采集的图片背景比较复杂&#xff0c;所以我想着采用框选矩形框掩膜的方式简单粗暴的消除背景对图片有用区域的干扰。网上搜索了一圈尝试了几种不同的方式去框选&#xff0c;最后发现还是Qt的鼠标事件比较容易上手。 效果图&#xff1a; 主要思路&#x…

QT—3D绘图

OpenGL是一个跨平台的、用来渲染3D图形的标准API,Qt对OpenGL提供了强大的支持。Qt4时代的QtOpenGL模块在Qt5中已经不再建议使用,OpenGL相关的类被移到了Qt GUI模块。Qt Widgets模块中的QOpenGLWidget类提供了一个可以渲染OpenGL图形的部件&#xff0c;通过该部件可以轻松地将Op…

【Qt】Qt环境配置与入门案例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Qt环境配置与入门。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

(三)NI采集卡应用学习:在Qt中实现多路数据的同时采集、显示、绘图及存储

1、使用NI MAX创建多路输入的测量任务 本处设置Dev1/ai0:3四路电压输入&#xff0c;采样率均为100&#xff0c;差分连接。 2、代码 // 设置地址 void Widget::on_add_pushButton_clicked() {address_txt QFileDialog::getExistingDirectory(this, tr("Open Directory&q…

linux程序框架设计,《Linux与Qt程序设计》知识框架

本文主要是通过一本书来大致了解Qt开发的框架,不对具体内容做详细分析。 1.首先弄清楚概念:定义->以自己的话理解是什么-> 实现的是什么功能->用在哪些地方 2.前面认识到的知识点的特点-> 代码实现-> 工程代码分析 第一部分 Linux基础知识 第二部分 Qt程序基础…

QT开发应用程序(11)--图形绘制和文本输出

代码演示&#xff1a; #include <QPainter> MyDraw::MyDraw(QWidget *parent) :QWidget(parent) {QLinearGradient linearGradient(0,0,400,400);linearGradient.setColorAt(0.0,Qt::white);linearGradient.setColorAt(0.2,QColor(0,0,0));linearGradient.setColorAt(1.…

chatgpt赋能python:使用Python捕获错误:为您的代码添加可靠性

使用Python捕获错误&#xff1a;为您的代码添加可靠性 在编写Python代码时&#xff0c;错误很常见。您可能会因输入无效参数而收到TypeError&#xff0c;或者因无法连接到数据库而收到ConnectionError。当这些错误发生时&#xff0c;您的代码可能会崩溃或产生不正确的结果。尽…

chatgpt赋能python:关闭Python:如何优雅地退出一个Python程序

关闭Python&#xff1a;如何优雅地退出一个Python程序 Python作为一门开发语言&#xff0c;可以广泛应用于众多领域&#xff0c;如数据科学、人工智能、Web应用开发等等。但有时候&#xff0c;我们需要关闭一个正在运行的Python程序。本文将介绍如何优雅地退出一个Python程序&…

chatgpt赋能python:Python异常捕获存在的问题

Python 异常捕获存在的问题 作为一门广受欢迎、应用广泛的编程语言&#xff0c;Python 在处理异常方面有着比较完善的设计。Python 提供了 try…except…finally 这样的异常处理机制&#xff0c;通过这些机制&#xff0c;开发者可以捕获、处理程序中产生的异常&#xff0c;从而…

yagmail——快速发送邮件

yagmail——快速发送邮件 目标&#xff1a;如何利用python中的yagmail包&#xff0c;快速发送邮件。 python写的一个简单demo脚本代码如下&#xff1a; import yagmail import pandas as pd from loguru import logger# 保存excel文件 contents pd.DataFrame() contents[&quo…

电脑和微信怎么发邮件到别人邮箱,企业邮箱如何发email给别人

邮箱已成为主流的办公软件&#xff0c;除了日常的电脑办公使用以外&#xff0c;你知道还有哪些便捷的方式使用邮箱吗&#xff1f;现在是互联网时代&#xff0c;许多邮箱都研发了手机邮箱配合使用&#xff0c;那TOM企业邮箱有哪些便捷的服务呢&#xff1f;一起看看吧&#xff01…

怎么发送电子邮件到别人邮箱?手把手教你!

在日常生活中&#xff0c;我们在工作学习的时候都离不开电子邮件&#xff0c;无论两人的距离有多远&#xff0c;都是可以通过电子邮件的方式完成信息的即时传递。这样不仅可以传输文字信息&#xff0c;还能传输图片、视频等多种格式的信息。那么&#xff0c;怎么发送电子邮件到…

chatgpt赋能Python-pythonapp自动化

Python App自动化&#xff1a;优化SEO的终极解决方案 随着互联网的发展&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;变得日益重要。对于任何网站或应用程序开发人员来说&#xff0c;SEO应该是一个非常重要的考虑因素。为了帮助开发人员和企业提高其在线可见性&#x…