Qt 5 架构和特点

2023-10-26

Qt  5 模块构架:

模块: 功能:
Qt Core Qt 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 OpenGL OPenGL支持类(已启用)现在使用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(作用于函数末尾)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 5 架构和特点 的相关文章

随机推荐

  • k-medoids聚类算法

    引言 上一篇博客介绍了k means聚类算法 该算法虽然高效快速 但却受异常点的影响严重 如果样本中存在异常点 则聚类结果会产生极大的偏差 针对异常点对聚类结果的影响 本文介绍k medoids聚类算法 k medoids算法能有效削弱异常
  • vue2项目打包dist文件后如何部署访问(本地部署和网络部署)

    1 本地部署 前提 1 注意端口的占用 防火墙的放行 2 注意后端服务的请求链接3 记得不要关闭运行4 记得element ui的引入要放在vue版本导入的后面 1 1 新建一个文件夹打开之后打开终端 1 2 npm i express s
  • 知识图谱技术概述

    1知识图谱定义与架构 1 1知识图谱定义 维基百科上对知识图谱的定义是这样的 知识图谱是谷歌及其提供的服务所使用的知识库 目的是通过从各种来源收集信息以增强其搜索结果的展示 这个定义时侠义的 知识图谱 是结构化的语义知识库 用于以符号形式描
  • 5分钟解决阿里云oss对象存储

    5分钟解决阿里云OSS对象存储 后附关键代码 启动代码如下 pom xml里添加依赖 com aliyun oss aliyun sdk oss 2 8 3 1 建类AliyunOSSClientUtil package io import
  • Centos8用户和组的管理

    1 用户和组的相关配置文件 1 1 用户的分类 linux用户三种角色 超级用户 普通用户 虚拟用户 超级用户 root 拥有对系统的最高的管理权限 UID 0 普通用户 系统用户 UID范围 1 999 Centos7 8版本 1 499
  • Python数据分析与挖掘——线性回归预测模型

    线性回归模型属于经典的统计学模型 该模型的应用场景是根据已 知的变量 自变量 来预测某个连续的数值变量 因变量 例如 餐 厅根据每天的营业数据 包括菜谱价格 就餐人数 预定人数 特价菜 折扣等 预测就餐规模或营业额 网站根据访问的历史数据
  • 超好用的开发工具-VScode插件EIDE

    EIDE介绍 一款适用于8051 STM8 Cortex M RSCv的单片机开发环境 在 vscode上提供8051 STM8 Cortex M RISC V 项目的开发编译烧录等功能 使用文档 简介 em ide com 论坛地址 Em
  • android 日期相减得天数_用 bash 倒计时日期

    需要知道重要事件发生前有多少天吗 让 Linux bash 和 date 命令可以帮助你 Sandra Henry stocker 作者 随着即将来临的重要假期 你可能需要提醒你还要准备多久 幸运的是 你可以从 date 命令获得很多帮助
  • 大量大数据如何进行查询

    1 两种查询引擎查询速度 myIsam 引擎 InnoDB 中不保存表的具体行数 也就是说 执行select count from table时 InnoDB要扫描一遍整个表来计算有多少行 MyISAM只要简单的读出保存好的行数即可 注意的
  • MySQL触发器

    MySQL触发器是用于在数据表上自动执行SQL代码的对象 触发器会在指定的数据库事件发生之前或之后触发 这些事件包括 INSERT 向表中插入数据之前或之后 UPDATE 更新表中的数据之前或之后 DELETE 从表中删除数据之前或之后 触
  • SpringBoot中logback不同环境日志配置

  • 高阶数据结构之LRU Cache

    文章目录 什么是LRU Cache LRU Cache的实现 JDK中自带的数据结构 模拟实现LRU Cache 双向链表 哈希表 什么是LRU Cache LRU的全称是 Least Recently Used 的缩写 表示最近最少的使用
  • 固态硬盘编译android源码,Mac 下的 Android 8.1源码编译(LineageOS 15.1 for XiaoMi Mix2)

    编译环境 OSX 10 12 Xcode 8 3 3 JDK 8 Android SDK 需要用到的软件 作者编译时遇到需要安装的目前就这些 不排除有用到之前自己装过的 Sed MacPorts Homebrew Imagemagick G
  • STM32以JSON格式发布HTTP请求

    在本文中 我们将学习如何将SIM800或SIM900与STM32微控制器一起使用 以及如何将JSON格式的HTTP发布请求发送到任何API服务器 介绍 除了Wifi模块或以太网模块 IoT项目也可以通过SIM800 900 GSM GPRS
  • zookeeper实现leader选举的一种方法

    写这篇文章之前 我需要解释下为什么需要实现leader选举 我们在软件系统构建过程中 总会有一个场景 就是如何保证系统高可用 保证高可用有一个简单方式就是多加几个副本 也就是部署多个节点 构成一个集群 一台机器挂掉 业务由另一台接管 在一个
  • Linux下hydra的使用

    Syntax hydra l LOGIN L FILE p PASS P FILE C FILE e nsr o FILE t TASKS M FILE T TASKS w TIME W TIME f s PORT Parameter R
  • java+date+定义+赋值,Java Script基础(五) 内置对象Date

    在JavaScript中 系统的内置对象有Date对象 Array对象 String对象和Math对象等 1 Date 用于操作日期和时间 2 Array 用于在单独的变量名中存储一系列的值 3 String 用于支持对字符串的处理 4 M
  • VS Code for Mac Hello World

    VS Code for Mac Hello World VS Code 控制台应用 打开VSCode gt Open gt 选择已经创建好的空文件夹Hello World Terminal gt New Terminal 打开控制台 dot
  • 算法之线性排序

    目录 前言 桶排序 计数排序 基数排序 问题 总结 参考资料 前言 桶排序 计数排序 基数排序这些排序算法的时间复杂度是线性的 所以我们把这类排序算法叫作线性排序 Linear sort 之所以能做到线性的时间复杂度 主要原因是 这三个算法
  • Qt 5 架构和特点

    Qt 5 模块构架 模块 功能 Qt Core Qt 5 的核心类库 每个模块都建立在Core上 Qt GUI 图形用户界面开发的最基础的类库 Qt Widgets 提供c 用户界面部件 是对Qt GUI的拓展 Qt SQL 对数据库进行操