当前位置: 首页 > news >正文

Qt 5 架构和特点

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(作用于函数末尾)

相关文章:

Qt 5 架构和特点

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

转换符说明使用方法(在printf函数中)

目录 一些常见的转换说明及打印结果: printf()的转换说明修饰符 printf()函数打印数据指令时要与代打印数据的类型相匹配才行。 如%d %c %ld......这些符号叫做转换说明。代表着数据转化成显示的形式。 一些常见的…...

针灸-基本任脉督脉

这里写自定义目录标题 丈量 同身丈下针深浅一般入穴的方法成人 幼儿 不同入穴方式现代常用针概念十二经 纳天干**天干**地支表里关系筋络任脉中脘穴:梅花灸巨阙穴廉泉穴督脉长强腰俞命门阳关悬枢脊中筋缩眼诊 癫痫至阳消渴...

信息系统与信息化

1.1 信息系统与信息化 1.1.1 信息的基本概念 信息质量属性(掌握)信息传输模型 1.1.2 信息系统的基本概念1.1.3 信息化的基本概念 信息化的五个层次信息化基本内涵信息化的基本概念(了解)六要素关系图(掌握) 1.1.4 信息系统生命周…...

解决axios异步请求问题(异步变为同步)

遇到的问题 在目前一个需求中,我需要等待axios请求完成后,判断请求是否出现异常,然后来判断是否关闭弹窗 修改后大概代码如下: async submitForm() {let flag false//表单验证,默认通过let formValidation truethis…...

【Django】云笔记项目

一、介绍 用户可在系统中记录自己的笔记,用户的数据被存储在云笔记平台;用户和用户之间的数据为隔离存储(登陆后才能使用相关笔记功能,且只能查阅自己的笔记) 二、功能拆解 1、用户模块 注册:成为平台…...

LeetCode——1797. 设计一个验证系统

一、题目 你需要设计一个包含验证码的验证系统。每一次验证中,用户会收到一个新的验证码,这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了,那么它会在 currentTime (可能与之前的 currentTime 不同&am…...

java Resource

参看本文前 你要先了解 spring中的 Autowired和Qualifier 注解 如果之前没有接触过 可以查看我的文章 java spring 根据注解方式按(类型/名称)注入Bean 然后 创建一个java项目 引入spring注解方式 所需要的包 然后 在src下创建包 我们这里直接叫 Bean 在Bean下创建包 叫UserD…...

ArkTS语法(声明式UI)

页面级变量的状态管理 装饰器装饰内容说明State基本数据类型,类,数组修饰的状态数据被修改时会触发组件的build方法进行UI界面更新。Prop基本数据类型修改后的状态数据用于在父组件和子组件之间建立单向数据依赖关系。修改父组件关联数据时,…...

自动化测试实战篇(7)jmeter连接mysql数据库,实现单表、多表、三表查询,并对表中数据进行修改,删除,新增操作

Jmeter也可以连接mysql数据库,通过JDBC去调用数据库内的参数到HTTP请求中进行接口测试,可以说是相当方便 自动化测试实战篇(7)jmeter连接mysql数据库,实现单表、多表、三表查询,并对表中数据进行修改&#…...

我的网站上线了!

最近有段时间没有写原创文章了,恰好这两天正在翻阅历史文章的时候,发现文章中的图片竟然裂了?顿时冒了一身冷汗,因为每逢遇到这种情况,动辄需要花费一周的时间迁移图片。。。。。。 当我直接访问图片 url 的时候&#…...

勒索病毒整体攻击态势简单分析

声明 本文是学习2018勒索病毒白皮书政企篇. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 勒索病毒整体攻击态势 2018年,勒索病毒攻击特点也发生了变化:2017年,勒索病毒由过去撒网式无差别攻击逐步转向以服务器定…...

Vue资源(组件库、实用插件)

文章目录 一、组件库如下1、Element-ui和Element-plus插件库(PC端👇🔗)2、Ant Design vue(👇🔗)3、Vant插件库(移动端👇🔗)二、插件库如下1、正确引入图片地址(👇🔗)2、Vuex状态存储(持久化persist👇🔗)3、Better-Scroll(移动端滚动条👇🔗)4、Vue和…...

java rpc框架 中的自定义异常类型的全局处理

– 这里的dubbo 可泛指 所有rpc框架 –比如自定义异常类型是MyEx, 以及myEx可以转化为MyResult – 需求: 凡是请求链路中抛出的MyEx需要自动及时或最终转化为 自定义的MyResult返回 – 1. spring 提供 controller端的全局异常捕获. 这一步简单 – 2. dubbo 需要 将MyEx 传输回来…...

面试题:Redis的内存策略

1 Redis内存回收Redis之所以性能强,主要原因是基于内存存储,然而单节点的Redis内存不易过大,会影响主从同步和持久化性能我们可以通过修改配置文件设置Redis的最大内存:当内存存储到上限时,就无法存储更多的数据了。1.…...

idea中使用Git

目录 一、在idea中配置Git 1、打开settings,搜索git,找到本地上的git安装目录,选择git.exe 2、本地git安装目录 二、获取Git 1、本地初始化仓库 2、选中项目这层目录,点击确定 2、从远程仓库克隆 三、本地仓库操作 1、将文…...

C++派生类指针赋值给基类指针问题(虚函数和非虚函数不同)

概念 上行转换:把派生类的指针或引用转换成基类表示,简单来说就是子类指向父类 下行转换:把基类指针或引用转换成派生类表示,简单来说就是父类指向子类 上行转换是安全的的,下行转换是不安全的(最好使用…...

数据库实践LAB大纲 04 触发器

游标 系统为用户开设的一个数据缓冲区 —— 存T-SQL语句从数据库检索出来的结果集 对结果集处理:结果集一条条提取记录,这时要用游标 使用 利用基于变量的select into语句,只能处理单条记录使用游标循环处理 声明游标: DECLA…...

Win10系统电脑开机后总是蓝屏无法使用怎么办?

Win10系统电脑开机后总是蓝屏无法使用怎么办?电脑开机的时候出现了蓝屏问题,这个情况是我们的电脑系统不兼容导致的。遇到这个问题一般是需要去进行系统的重装来解决,安装一个更兼容的系统就可以解决问题了。一起来看看详细的解决方法分享吧。…...

Node——使用nvm切换node版本

1. 下载mvn安装包 https://pan.baidu.com/s/1alfyRvwVWr_TrkN0A9Er5g?pwd1v7c 2. 安装后命令输入mvn -v 验证是否安装成功 3. mvn命令 nvm list available 显示可下载的版本nvm install [node版本号] 显示可下载的版本nvm uninstall [node版本号] 删除已安装的指定版本nvm…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...