当前位置:   article > 正文

Qt 5 架构和特点_qt5特点

qt5特点

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的修饰
  • 当有重载信号时,使用新的信号与槽需要转化为函数指针
  1. signals:
  2. void show(QString);
  3. void show(int);
  4. //函数指针
  5. //返回类型(类名:: *名称)(参数类型)=&类名::函数名
  6. //转化为函数指针,假设类名为 widget
  7. void(widget:: * p1)(QString)=&widget::show;
  8. 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(作用于函数末尾)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/109995
推荐阅读
相关标签
  

闽ICP备14008679号