Qt 5 架构和特点

news2024/12/25 15:31:24

Qt  5 模块构架:

模块:功能:
Qt CoreQt 5 的核心类库,每个模块都建立在Core上
Qt GUI图形用户界面开发的最基础的类库
Qt Widgets提供c++用户界面部件(是对Qt GUI的拓展)
Qt SQL对数据库进行操作
Qt Multimedia、Qt Multimedia Widgets对视频和音频等提供支持和部件
Qt Network提供网络编程
Qt Test测试工具
Qt QML提供对QML和javaScript语言的支持
Qt Quick提供一个用于创建高度开发的框架,基于QML和javaScript
Qt Quick Controls提供Qt Quick的UI控件
Qt Quick Dialogs提供Qt Quick的对话框
Qt Quick Layouts提供Qt Quick的项目布局

Qt 5 中 由于QML和Qt Quick 的出现,使得在Qt 5 中 c++与QML +javaScript的地位几乎平等,Qt 5 中的几乎所有上层API 都同时支持面向C++和面向QML的两套接口

部分扩展模块:

模块:功能
Qt 3D支持2D和3D渲染的近实时仿真系统的功能
Qt Digital Advertising实现嵌入式屏幕等
Active Qt使应用程序调用ActiveX和COM接口
Qt Bluetooth提供对蓝牙的访问
Qt Concurrent多线程类的分装
Qt Help帮助文档
Qt NFC对NFC的支持
Qt OpenGLOPenGL支持类(已启用)现在使用QOpenGL
Qt Positioning提供对位置、卫星和却与监控类的访问

有很多可用的模块可以点击该链接查看:Qt特性 | 基础框架、工具与扩展模块

 图形界面库的框架:

Qt 5的图形界面所需要的类几乎都组合到Qt Widgets中,不在Qt GUI,例如QApplication和QWidget。

  • 现在Qt GUI主要为各种图形界面控件提供一般的处理
  • Qt GUI的图形部件类移动到Qt Widgets中
  • Qt 5移除Qt OpenGL 把QOpenGL添加到Qt GUI中

Qt 5的图形界面框架图:

 架构的主要特点:

  • 把全部的Qt 接口迁移到Qt 平台抽象层(QPA)上,使得能更好的移植到另外的系统和设备上
  • 重新设计了图形堆栈,使得性能提高,Qt 5为Qt Quick引入全新的图形架构,基于OpenGL的场景图
  • 更加灵活的模块结构,满足桌面和移动的融合,按需添加或删除特定的模块

  Qt 5的部分特点

  • 现在的Qt涵盖多个平台,使用Qt开发框架可以开发出含桌面。嵌入式。移动等多个平台的应用程序。
  • Qt 5 使用基于OPenGL的场景图来加速Qt Quick的图形显示,可以设计出更好的设计,即使在移动或嵌入式设备上亦可以流畅运行
  • Qt 5的 Qt Quick   为QML饮用提供了基础的框架
    • Canvas 提供绘画
    • Shader Effects 将GLSL着色器程序集成到QML中
    • Particle Effects 粒子效果可以创建各种2D粒子子系统
    • Sprites 用于2D图像对象的动画效果中,也可用于粒子系统的源
    • Offline storage JavaScriptAPI
    • Window 提供一个顶级窗口
    • OpenGL Qt Quick基于OpenGL渲染架构来获得最佳性能
  • Qt Quick 降低了开发的复杂度,Qt Quick  Control和Qt Quick Layouts使得设计用户界面变得更加简单
  • Qt 5中可以使用传感器和地图定位
  • Qt 5带来最新的HTML5的支持,QtWebEngine 是Web内容的渲染引擎
  • Qt MuLtimedia 提供多媒体方面的功能
  • Qt Location 模块提供了地图位置的数据
  • Qt平台抽象层(QPA)Qt 窗口系统相关的部分在Qt5中全部基于Qt 平台抽象层进行重写
    • 简化移植Qt到新平台所需要的工作
    • 集中窗口系统集成代码库到一些类中,使得类多平台共享
    • 在Qt 中删除窗口依赖,使得在多个窗口系统中可以运行同一个Qt二进制文件成为可能
  • Qt 5更新了信号与槽机制
  • Qt 5对IVP6和双模式提供了更好的支持‘
  • Qt 5 涵盖了多种触控输入

c++和QML 

在Qt 5 中添加了QML,这样在设计时需要使用哪个进行开发,现在的大型项目一般使用QWidget为主QML和Qt Quick 为辅的开发模式

  • QWidget现在依然是开发桌面应用的核心,拥有丰富的组件
  • QML和Qt Quick 现在刚推出不久,开发组件比较缺乏企业级应用程序的控件
  • C++现在依然是Qt开发的主体,但在富含动画的效过上QML明显占优

Qt 5 新的信号与槽和旧的信号与槽的区别

 旧的信号与槽:

connect(sender,SIGNAL(valueChanged(参数)),recriver,SLOT(showValue(参数)))

新的信号与槽:

connect(sender,&Sender::valueChanged,receiver,&Receiver::showValue)

新的信号与槽的特点:

  • 支持编译期检查,会在编译时检查信号与槽的拼写错误等
  • 支持相容参数类型的自动转换,新的语法不仅可以支持使用typedef或者命名空间,还支持使用隐式的自动类型钻换
  • 允许连接到任意函数,旧的信号与槽只能使用slots关键词修饰的成员函数,新语法中可以通过函数指针直接调用函数
  • 在槽函数中可以使用c++11中的lambda表达式替代
  • 槽函数可以被声明为private 但SLOT会无视private的修饰
  • 当有重载信号时,使用新的信号与槽需要转化为函数指针
signals:
void show(QString);
void show(int);


//函数指针
//返回类型(类名:: *名称)(参数类型)=&类名::函数名

//转化为函数指针,假设类名为 widget
void(widget:: * p1)(QString)=&widget::show;
void(widget::*p2)(int)=&widget::show;

 在Qt5中的c++11的宏:

到Qt 5中可能有些编译器不支持c++11,Qt 5 通过一系列宏来兼容c++11

  1. constexpr:用于向编译器起指出那些内联函数可以在编译器运算,使用Q_DECL_CONSTEXPR宏
  2. static_assert :c++11添加了静态断言,允许在编译器检测一些条件是否成立,使用Q_STATIC_ASSERT和Q_STATIC_ASSERT_X两个宏
  3. override :当一个函数被override修饰时,这个函数必须覆盖父类的函数 使用,Q_DECL_OVERRIDE(用于函数末尾)
  4. final :用于打断 父类声明为virtual,所有子类的相同函数都为virtual的机制,如果一个虚函数被final修饰,这个函数在这个类中的所有子类都不允许被覆盖。使用Q_DECL_FINAL(用于函数末尾)
  5. deleted 用于显示禁止C++编译器生成代码,使用Q_DECL_DELETE(作用于函数末尾)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows 上编译 cpu 版本的 ncnn

windows 上编译 cpu 版本的 ncnn 从 发布页面 下载最新的完整的 ncnn 代码包,即 -full-source 后缀的文件。以及 protobuf 的代码包(用于生成 caffe2ncnn 和 onnx2ncnn 工具)。 我下载的 20221128 版本的 ncnn 和 3.11.2 版本的 protobuf。…

C语言经典编程题100例(1-20)

1、练习2-1 Programming in C is fun!本题要求编写程序&#xff0c;输出一个短句“Programming in C is fun!”。输入格式:本题目没有输入。输出格式:在一行中输出短句“Programming in C is fun!”。代码&#xff1a;#include<stdio.h> int main() {printf("Progra…

https之数字证书分析

写在前面 当我们要给网站配置https时&#xff0c;都需要申请 一个数字证书&#xff0c;然后将数字证书配置在网站上&#xff0c;如下可能配置: <Connector port"446" protocol"org.apache.coyote.http11.Http11Protocol" SSLEnabled"true"s…

TCP的三次握手 四次挥手 和相关问题

TCP 三次握手 四次挥手 tcp在传输层 tcp&#xff1a; tcp报文&#xff1a; 三次握手&#xff1a; tcp 其中也涉及到了状态的切换 利用了这种状态保证了建立连接和断开连接的逻辑 两次握手不可&#xff1f; 第一个解释: 这个问题的本质是, 信道不可靠, 但是通信双发需要就某个…

var const let

菜鸟学前端 本文&#xff1a;https://www.jianshu.com/p/b7116525273b 文章目录varlet和const写不动了参考说实话&#xff0c;在看到这个之前&#xff0c;我只知道 var&#xff0c;以前也只用过这玩意。 后面那俩都不知道是干啥用的。 感谢同桌的提示。 记&#xff01; var v…

LR2023磨皮滤镜插件Portraiture4最新版

Portraiture4是一款智能磨皮的滤镜插件&#xff0c;该插件能够给Photoshop和Lightroom添加智能磨皮美化功能&#xff0c;可以帮助用户快速对图片中的人物的皮肤、头发、眉毛等部位进行美化&#xff0c;省去了手动调整的麻烦&#xff0c;大大提高P图的效率。Portraiture这是一款…

【线下沙龙】如何用项目管理的思维经营自己的生活

为什么自己参加那么多的学习&#xff0c;也没有过好自己的人生&#xff1f;这个问题出在哪里&#xff1f; 你勾画过自己未来的生活吗&#xff1f; 你没有渴望过的东西会出现在你的生活里吗&#xff1f; 如何实现自己想要的生活&#xff1f; 有一个全球性的调查问卷&#xff1a;…

IDEA运行IAM3.0的管理后台项目(WAR包运行)

1、查看打包方式 远程仓库拉取最新代码 首先查看项目打包方式&#xff0c;为war说明是在容器中运行的。 2、修改数据库配置 将数据库配置修改为本机配置&#xff0c;一般有一个properties配置文件&#xff0c;避免启动之后发现数据库不对又得重启。 3、 系统环境配置 Ct…

【前端笔试题一】:解析url路径中的query参数

前言 本文记录下在笔试过程中的前端笔试编程题目&#xff0c;会持续更新 1. 题目&#xff1a; 解析 url 路径中的 query 参数&#xff0c;比如&#xff1a;‘http://building/#/skeleton?serialNumber2023020818332821073&jobNo210347&target%7B%22a%22%3A%22b%22%2C…

Spring6—JdbcTemplate基础

JdbcTemplate是Spring提供的一个JDBC模板类&#xff0c;是对JDBC的封装&#xff0c;简化JDBC代码。 可以让Spring集成其他的ORM框架:Mybatis、Hibernate等 环境&#xff1a;JDK17IDEAMavenSpring6JdbcTemplate 环境准备 准备数据库表 新建模板 New Module Maven项…

Spring中更简单的存储和读取Bean

目录 一、存储Bean 1.1 配置扫描路径 1.2 使用注解存储Bean对象 1.2.1 五大类注解 1.2.2 方法注解Bean 二、获取Bean 2.1 属性注入 2.2 setter注入 2.3 构造方法注入 2.4 Resource注解 2.5 同一类型多个Bean报错 一、存储Bean 在xml时代&#xff0c;存储一个Bean对象…

力扣SQL刷题7

1132. 报告的记录 II 题型&#xff1a;表1&#xff0c;对列A分组&#xff0c;在列B满足某种条件下&#xff0c;&#xff08;出现在表2中的列C值个数&#xff09;/(列C个数)的比例&#xff0c; 对A分组各类别中取均值 解答1&#xff1a; select 列A&#xff0c;count(distinct …

Kotlin 面向对象(一)

【文字内容源于《疯狂Kotlin讲义》&#xff0c;代码内容原创】 目录 一、类和对象 1.定义类 2.对象的产生和使用 3.对象的this引用 二、方法详解 1.方法与函数的关系 2.中缀表示法 3.componentN方法与解构 4、数据类和返回多个值的函数 5、在Lambda表达式中结构 三…

PHP反序列化漏洞之pop链2

目录 题目&#xff1a; 题目代码&#xff1a; 分析&#xff1a;代码审计 通过以上分析&#xff0c;最终我们构建这个payload&#xff1a; 结果&#xff1a; 目标达到&#xff01; 题目&#xff1a; 这个题目分析就有难度了&#xff0c;需要掌握php的魔法方法的使用以及调用…

算法刷题打卡第85天:设计一个验证系统

设计一个验证系统 难度&#xff1a;中等 你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可…

你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

100 行 shell 写个 Docker

作者&#xff1a;vivo 互联网运维团队- Hou Dengfeng 本文主要介绍使用shell实现一个简易的Docker。 一、目的 在初接触Docker的时候&#xff0c;我们必须要了解的几个概念就是Cgroup、Namespace、RootFs&#xff0c;如果本身对虚拟化的发展没有深入的了解&#xff0c;那么很…

java全栈知识点[面试篇](一)

jjava全栈知识点[面试篇]&#xff08;一&#xff09;阻塞与等待的状态转变⭐Synchronized本质上是通过什么保证线程安全的?volatile、synchronized和Lock如何保证可见性⭐Synchronized使得同时只有一个线程可以执行&#xff0c;性能比较差&#xff0c;有什么提升的方法?⭐syn…

Unity 进阶 之 AR/VR 3D空间场景中Laser镭射线拖拽UI实现问题的简单整理

Unity 进阶 之 AR/VR 3D场景中Laser镭射线拖拽UI实现问题的简单整理 目录 Unity 进阶 之 AR/VR 3D场景中Laser镭射线拖拽UI实现问题的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、简单实现步骤 常规拖拽 常规拖拽在3D空间拖拽位置跳动问题 解决…

C++003-C++变量和数据类型2

文章目录C003-C变量和数据类型2C数据类型数据类型及定义数据类型及类型大小浮点数据的使用**题目描述**&#xff1a;求阴影面积**题目描述**&#xff1a;计算园的周长和面积如何取消科学计数法表示浮点数iomanip的作用比较多:布尔变量的使用隐式转换与显式转换**题目描述**&…