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