小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到。对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文中有不对之处希望大牛们打脸(虽然脸都已经被打肿了。。。。)
1、Qt的跨平台性(Linux、Unix、、Mac OS、Android、IOS)
简而言之:Qt的功能是建立在它所支持的平台底层API之上的。

Qt/Windows对应的是GDI(Graphics Device Interface),很容易就知道它是Qt封装的与GDI交流的API。而GDI是Windows下图形绘制及显示的主要API。
Qt/X11同样是对X Windows的编程接口。Linux本身是没有操作界面的,目前主流带有操作界面的Linux系统都是基于X WIndows的,已经列入了Linux发行标准软件了。X Windows是C/S框架的(就是所有的鼠标事件传递到X Windows的服务端处理之后对应在屏幕上显示内容),Qt/X11使用Xlib直接与X服务器通信的。(GDI是集成到Windows内核的,而X Windows只是Linux系统的应用软件而已)
Qt/Macintosh就不用说了。Carbon是Mac OS X下应用程序开发环境,包含了应用程序的图形部分。目前主流的Cocoa好像使用更好。
上图主要说明的是UI部分,Qt跨平台都是调用本地的图形风格。

三种操作系统都支持主流的文件系统(文件系统并不是操作系统固有的,文件系统描述的硬盘里面文件存储和查找的方式),通信都是采用socket框架(socket是网络时代的产物,那时候的操作系统已经很成熟了)。至此可以大致了解了Qt跨平台的基本原理了。

Qt框架
在Qt帮助里面搜索All modules可以清楚的看到Qt的模块分布。

Qt Essentials(Qt的基本模块)这里指的是开发者会经常使用到的稳定模块。
2.Qt Add-Ons (扩展模块)扩展模块中针对移动端做的模块比较多,常用的Qt Bluetooth、Qt Positioning、Qt Sensors。UI方面的常用的有Qt Graphical Effects、Qt Image Formats、Qt SVG。新增的PC硬件资源的好用的Qt Print Support、Qt Serial Port,原来在多媒体模块有对Camera、Screen、Audio Device 的支持。Qt XML小白用的表较少,貌似在数据处理方面很好用。Qt Quick Widgets小白非常喜欢,因为小白去年写的UI基本是基于QWidget的,想扩展Qml界面这个非常方便。对于想在Qt上开发3D的Qt Canva 3D(5.5才有的),这个相对使用OPENGL入门更简单一些。
还有一些Value-Add、Technology Preview 、 Tool modules都不太影响框架的认识。
基本模块结构图

小白这里只列举了一下常用到的模块结构分部,详细的还是需要参考帮助文档。
在Qt Widgets模块中,这里说明一下QGraphics Scene与QWidget是Qt两个不同的UI体系(前者基于OpenGL后者是基于原始的绘图设机制),发展源头是不一样的,详细可以看下这个博客绘图设备和Graphics View Framework
图形界面库的架构

这个图里面包含Qt GUI以及Qt Widget的部分组成,其中蓝色块表示包含在GUI模块中的,可以参考一下上图中的Qt GUI模块的功能描述,并不包含所有的显示部分,想要仔细了解可以查阅帮助文档。
从这里也可以更加直观的看到两个不同的UI体系是怎么架构起来的。需要注意的是,Qt Quick1是从QPainter体系设计出来的。下面我们会对Qt Quick1与Qt Quick2的架构说明。
Qt Qml和Qt Quick 框架
QML:(Qt Meta-Object Language)强调指出这是一种语言,描述应用的声明式语言,什么语法规则什么啊,目前有很多脚本语言都是描述性的。
Qt Qml:是QML**应用开发以及标准库的框架**,并且提供了一个接口,允许开发者以自定义类型和继承Javascrip与C++代码方式来扩展QML语言。小白的理解就是,我们开发用的QML、Javascript、C++、Html混合编程时所需要的模块是在这里提供的。它是基于Qt专用引擎开发的(QML解释器)。
Qt Quick:Qml模块本书并不涉及显示,所有的图形处理都是有Quick模块来完成。经过了Qt GUI、OpenGL、Scene Graph三层封装。强调的是如何高效的绘制图形并按要求创建各种效果。所以里面包含了可视化类型(QML)、交互类型、动画、模型视图、粒子特效、渲染特效等。
分清楚这三个概念,来看看Quick1和Quick2的区别。

这里就可以很清楚为什么Quick1只能做一些变形旋转而没有更牛的特效了,因为QPainter确实不能做那个,大牛当然可以直接在Qt4下直接使用QOpenGL做特效。

Qt的基本框架这里大致还只是做了概念上的介绍,可以在阅读过程中查看帮助文档,边看变了解具体模块及模块中涉及到的类基本介绍。这里主要还是参考的《Qt5 编程入门》。以后还会不断的修补修补的。。。
---------------------
作者:Spwperlukami
来源:CSDN
原文:https://blog.csdn.net/Spwper/article/details/51316191
版权声明:本文为博主原创文章,转载请附上博文链接!

Qt框架及模块认识的更多相关文章

  1. Qt 框架 开发HTTP 服务器 开发记录

    最近需求需要开发一款 HTTP ,然后由于先前接触过Qt,就直接用Qt写HTTP服务器了,也是为了当作练手,要不然是直接上HTTP框架的. 后端用C++ Qt框架 前端为了练手 当然是纯生的 js h ...

  2. (三):C++分布式实时应用框架——系统管理模块

    C++分布式实时应用框架--系统管理模块 上篇:(二): 基于ZeroMQ的实时通讯平台 一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个"封闭"的系统.你不可能 ...

  3. jQuery系列 第八章 jQuery框架Ajax模块

    第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是Ajax实现的关键,发送异步请求.接收服务器端的响应以及执 ...

  4. SSH框架分模块开发

    ------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring ...

  5. 使用Qt框架开发http服务器问题的记录

    最近需求需要开发一款 HTTP ,然后由于先前接触过Qt,就直接用Qt写HTTP服务器了,也是为了当作练手,要不然是直接上HTTP框架的. 后端用C++ Qt框架 前端为了练手 当然是纯生的 js h ...

  6. Qt5的插件机制(1)--Qt 框架中的插件载入机制概述

    概述 Qt的源代码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件 ...

  7. 第二章、drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 (详细版)

    目录 drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 Postman接口工具 drf框架 注册rest_framework drf框架风格 drf请求生命周期 请求模块 ...

  8. .Net框架的模块代码生成器--其二(dotnet tool)

    以下是个人工作场景,继上篇后,还剩下第3步骤没有解决 3.(这个可能我们公司才有)每个模型还要在每一层那里创建一个文件,这个模型的增删改查逻辑就在这里写 这个我是自己写一个.Net Core命令行工具 ...

  9. .Net框架的模块代码生成器--其一(dotnet new)

    小白教程声明,首先先介绍一下.Net 框架及模块是什么情况: 1.公司的大佬会把框架的代码打包成Nuget包放在公司的服务器上 2.公司会专门开一个git仓库,存储模块的代码,每个模块都有其独立的文件 ...

随机推荐

  1. git 强制覆盖分支

    假设要用develop覆盖master分支,如下操作 git checkout master git reset --hard develop //先将本地的master分支重置成develop gi ...

  2. 编写程序,将来自文件中的行保存在一个vector<string>,然后使用一个istringstream 从vector中读取数据,每次读一个单词

    #include<fstream> #include <vector> #include<string> #include<iostream> #inc ...

  3. 使用javascript和css模拟帧动画的几种方法浅析

    我们平时在开发前端页面的时候,经常会播放一段帧序列.这段帧序列就像gif图片那样,反复循环播放.那大家可能会说,直接用gif图片就好了,干嘛还去模拟呢?那是因为要做得更加灵活,我们要做到以下几点: 1 ...

  4. __x__(10)0906第三天__字符实体(转义字符)

    实体:也叫转义字符,在网页中,一些类似“大于号”和“小于号”这样的字符,无法直接使用,需要用特殊的字符串来表示. 实体语法: “&实体名字;” 或者 “&实体编号;” 注意: 最好使用 ...

  5. (88)Wangdao.com第二十一天_JavaScript 元素节点Element 节点

    Element 节点 (元素节点) 是一组对象 对应网页的 HTML 元素 每一个 HTML 元素,在 DOM 树上都会转化成一个 Element 节点对象(以下简称元素节点) 所有元素节点的 nod ...

  6. FJUT3260

    不是啊..不是说双栈嘛,,怎么是个**题啊. 链接:  http://120.78.128.11/Problem.jsp?pid=3260    从左到右扫一遍,把相交的区间扔到一起算,那么就变成了一 ...

  7. SSM的,日常错误

    org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.imooc ...

  8. mysql 中通过身份证号码计算年龄

    SELECT DATE_FORMAT(NOW(), '%Y') - SUBSTRING( '换成对应身份证',7,4) AS age

  9. 音视频下载Chrome插件 官方主页

    2019年3月20日前的旧版有不能下载的情况,请使用下面的新版 音视频下载是个点击图标后就能下载网页里正在播放的音视频文件的软件 下载:官方下载                百度网盘     Chr ...

  10. python3 参数*args 、 **args 在函数定义和调用中的应用

    一.函数调用时 说明:*args 表示解包(解包 列表.元组.字符串类型) #定义函数cn_musql def cn_musql(host,port,user,pwd,db): print(host) ...