初识Qt
本人硬件工程师一枚,在我开始想通过软件将公司的硬件电路设计标准化之前,我对Qt并不怎么了解,只知道她基于C++语言开发应用程序,然而我的C++也很烂,这也是我不去碰MFC框架而转战Qt的原因之一,当然这两者之间的优缺点对比不再细说;Google了一下Qt了解到的信息如下:
Qt发展史
- 1991年Qt由Trolltech(奇趣科技公司)开发
- 2008年Nokia(诺基亚)收购了Trolltech,Qt自然成为诺基亚旗下编程语言
- 2012年Nokia将Qt业务及相关软件技术出售给了Digia(芬兰一家软件公司)
- 2013年之后,Digia成立了Qt开发团队细心培育Qt,2019年12月11日15点49分Digia发布Qt最新版本为Qt5.14.0
Qt能做什么
Qt是一个跨平台的C++应用程序开发框架,用她可以轻易做出艺术级的图形界面;Qt 支持跨平台体现在她可以支持各大主流操作系统(Windows、Linux、Unix、嵌入式系统等);总的来说Qt用在各类桌面应用程序开发以及嵌入书系统应用程序开发上,比较典型的案例如Linux桌面环境KDE、WPS Office办公软件以及谷歌地图等
Qt商业版和开源版
Qt发行的版本分为Qt商业版和Qt开源版:商业版专门提供给商业软件开发使用,在商业有效期内会提供免费升级和相关技术支持服务;开源版开放Qt源码,开源版提供了和商业版同样的功能,我们可以认为开源版是为了让Qt更为主流以及强大其自身所设,但最初其实是为了解决Linux桌面环境KDE与Qt的商业授权的纠纷才为Qt增加了GPL开源授权;我们最关心的还是开源版是免费的
为什么选择Qt
以上已间接说明我们为什么要选择Qt,但还是需要总结一下是什么使Qt对我们有价值而让我们选择她:
- One framework. One codebase. Any platform(Everything you need for your entire software development life cycle. Qt is the fastest and smartest way to produce industry-leading software that users love.)
- The Future Is Written with Qt
- Qt video introduction
Qt平台介绍视频
Qt各个版本下载
- Qt最新版本:Qt5.14.0;后文使用这个版本(qt-opensource-windows-x86-5.14.0)进行开发,安装方式很简单不讲解,安装时不要漏选自己所需要的组件
- Qt所有版本
Qt技术愿景(来自Qt博客翻译)
Qt6简介
7年前,Digia发布了Qt5,到目前为止,世界已变化太多;Qt6.0也将准备在2020年底之前首次发布;Qt6将延续Qt在Qt5系列中所做的工作,Qt6的发布不会破坏现有用户(Qt6的目标是与Qt5系列具有高度的兼容性);新的Qt版本将会比Qt5系列拥有更高的自由度来实现用户的各种功能,会更好的支持当今以及未来的需求;当然Qt5新版本也会继续迭代开发,但更多的研发重点将转向Qt6;Qt对其客户和用户的核心价值如下:
- 它具有跨平台特性,允许用户使用一种技术并从一个代码库将其应用程序部署到所有台式机,移动和嵌入式平台
- 其可扩展性从低端,单一用途的设备到高端复杂的桌面应用程序或连接系统
- 世界一流的API,工具和文档,简化了应用程序和设备的创建
- 可维护性,稳定性和兼容性,可轻松维护大型代码库
- 拥有超过100万用户的大型开发者生态系统
Qt新版本会调整Qt以适应新的市场需求,但是上述5项依旧是其工作的核心
台式机市场是Qt产品的基础,对Qt来说是强大而重要的市场。这是Qt大多数用户与Qt首次接触的地方,并构成了Qt工具的基础。保持健康和成长是在其他市场也要成长的先决条件
嵌入式和连接设备是Qt最大的增长点。触摸屏正越来越多地用于设备,但是这些设备的硬件价格承受着巨大压力。低端芯片组,微控制器以及中小型触摸屏将在任何地方使用。这些设备中的大多数将具有相对简单的功能,但需要优美而流畅的用户界面。Qt6将创建大量此类设备来定位该空间以实现Qt的可扩展性承诺
同时,设备范围高端的用户界面将继续增加复杂性,其中包含数千个不同的屏幕和许多应用程序。将2D和3D元素合并到一个用户界面中是很常见的,增强现实和虚拟现实的用法也是如此
人工智能元素将在应用程序和设备中更常用,Qt将用简单的方法来与它们集成
下一代QML
在过去的几年中,QML和Qt Quick已经成为推动Qt发展的主要技术,使用这些技术创建用户界面的直观方式使越来越多的用户选择Qt;但是Qt5所用的QML具有一些怪异和局限性,所以Qt6将计划做如下主要更改:
- 引入强类型:弱类型使用户很难对他们的代码库进行较大的更改,强类型将允许IDE和其他工具再次热舞中为用户提供支持,并极大简化代码的维护;此外Qt将能够生成更好的代码以减小系统开销
- 使JavaScript成为QML的可选功能:使用QML时拥有完整的JavaScript引擎可能会使事情复杂化,并且特别是在针对低端硬件(例如微控制器)时,这是一项开销。但是,它在许多用例中都非常有用
- 删除QML版本控制:通过简化QML中的某些查找规则并更改上下文属性的工作方式,可以消除QML中版本控制的需要。反过来,这将导致QML引擎的大幅简化,大大简化Qt团队维护Qt Quick的工作量,并为用户简化QML和Qt Quick的使用
- 消除QObject和QML之间的数据结构重复:当前,在Qt的元对象系统和QML之间有很多数据结构重复,从而降低了启动性能并增加了内存使用率。通过统一这些数据结构,我们将能够减少大部分开销
- 避免运行时生成的数据结构:这与之前的观点有关,在此之前,当前正在运行时生成许多这些重复的数据结构。应该完全有可能在编译时生成它们中的大多数
- 支持将QML编译为高效的C++和本机代码: 通过强大的键入和更简单的查找规则,我们可以将QML转换为高效的C++和本机代码,从而显着提高运行时性能
- 支持隐藏方法细节: 长期以来,“私有”方法和属性一直要求能够隐藏QML组件中的数据和功能
- 更好的工具集成:我们当前用于QML的代码模型通常是不完整的,使得重构和在编译时检测错误很难甚至不可能。通过上述更改,应该可以提供可以与C++语言匹配的编译时诊断程序,并且可以大大改善重构支持
下一代图形
从Qt5.0发布到现在,图形领域已经发生了很多变化,Qt会对图形对战进行重大的更改才能保持竞争力
Qt 5使用OpenGL作为3D图形的统一API。从那时起,已经定义了许多新的API。Vulkan是Linux上OpenGL的指定继任者,苹果正在推动Metal,微软拥有Direct 3D。这意味着Qt将来将不得不与所有这些API无缝协作。为了使之成为可能,必须定义一个抽象层来抽象图形API(例如用于平台集成的QPA),称为渲染硬件接口(RHI)。我们将需要在该层之上建立所有渲染基础结构(QPainter,Qt Quick Scenegraph和3D支持)
一组不同的图形API也导致Qt必须支持不同的着色语言。Qt着色器工具模块将帮助我们在编译和运行时交叉编译着色器
3D扮演着越来越重要的角色,而当前的Qt产品还没有统一的解决方案来创建同时包含2D和3D元素的UI。目前,将QML与来自Qt 3D或3D Studio的内容集成起来很麻烦,并且会导致性能开销。另外,不可能在2D和3D内容之间逐帧同步动画和过渡
3D内容与Qt Quick的新集成旨在解决此问题。在这种情况下,全新的渲染器将允许一起渲染2D和3D内容,并支持两者之间的任意嵌套。这将把QML变成我们用于3D UI的UI定义语言,并且不再需要UIP格式。Qt团队将在Qt 5.14中提供具有3D支持的“新” Qt Quick的技术预览
最后会为Qt6带来一个统一的主题/样式引擎,这将使我们能够在Qt Widgets和Qt Quick的桌面和移动平台上获得原生的外观
增强C++ API
Qt5.0基于C++ 98,Qt6将依靠C++ 17来实现,但同时不会失去向后兼容性
来源:CSDN
作者:madmanazo
链接:https://blog.csdn.net/qq_36788698/article/details/103948116