![]() ![]() 7年前,发布了Qt 5。从那时起,我们周围的世界发生了很多变化,现在是时候为新的主要版本定义愿景了。这篇博客文章捕获了可以并且应该定义Qt 6的最重要的观点。 Qt 6将延续我们在Qt 5系列中所做的工作,因此不会破坏我们的用户。但是,与Qt 5系列产品相比,新的主要版本将使我们拥有更大的自由度来实现新功能,新功能并更好地支持当今和未来的需求。如下面更详细描述的,Qt 6的目标是与Qt 5系列具有高度的兼容性。我们仍在开发新版本的Qt 5,我们的目标是将一些定义Qt 6的功能略微简化为Qt 5.14和Qt 5.15 LTS。随着Qt 5.14的功能冻结,更多的研发重点将转向Qt 6,我们的目标是在2020年底之前准备好Qt 6.0的首次发布。 是什么使Qt对我们的用户有价值? Qt是一种水平产品,已在许多不同的市场中使用。Qt对我们的客户和用户的核心价值是:
Qt的新版本需要调整我们的产品以适应新的市场需求,同时将上述5项保持在我们所做工作的核心。 台式机市场是我们产品的基础,对Qt来说是强大而重要的市场。这是我们大多数用户与Qt首次接触的地方,并构成了我们工具的基础。保持健康和成长是在其他市场也要成长的先决条件。 嵌入式和连接设备是我们最大的增长点。触摸屏正越来越多地用于设备,但是这些设备的硬件价格承受着巨大压力。低端芯片组,微控制器以及中小型触摸屏将在任何地方使用。这些设备中的大多数将具有相对简单的功能,但需要优美而流畅的用户界面。将创建大量此类设备,我们需要确保我们可以通过提供产品来定位该空间,以实现我们的可扩展性承诺。 同时,设备范围高端的用户界面将继续增加复杂性,其中包含数千个不同的屏幕和许多应用程序。将2D和3D元素合并到一个用户界面中是很常见的,增强现实和虚拟现实的用法也是如此。 人工智能元素将在应用程序和设备中更常用,我们将需要简单的方法来与它们集成。 正在创建的连接设备数量的强劲增长以及对用户体验的更高要求,对于我们而言,专注于世界一流的工具以简化应用程序和设备的创建变得更加重要。将UX设计器集成到开发工作流中是我们的目标之一,但是在许多其他领域中,我们需要尝试简化用户的生活。 Qt 6将是Qt的新主要版本。如此新的主要版本的主要目标是为Qt做好准备,以迎接2020年及以后的需求,清理我们的代码库并使其更易于维护。因此,重点将放在那些需要在Qt内进行体系结构更改且无法在不破坏与Qt 5.x的兼容性的情况下完成的项目上。 以下是我们需要在Qt中进行的一些关键更改,以使其适合未来几年。 ![]() 02 下一代QML 在过去的几年中,QML和Qt Quick已成为推动我们发展的主要技术。使用这些技术创建用户界面的直观方法是我们产品的独特卖点。 ![]() 但是,为Qt 5创建的QML具有一些怪异和局限性。反过来,这意味着我们计划在Qt 6上实现显着增强的潜力。这里计划的主要更改是: 引入强类型。 弱类型打字使我们的用户很难对他们的代码库进行大的更改。强大的类型系统允许IDE和其他工具在此任务中为我们的用户提供支持,并极大地简化了维护。而且,我们将能够生成性能更好的代码并减少开销。 使JavaScript成为QML的可选功能。 使用QML时拥有完整的JavaScript引擎可能会使事情复杂化,并且特别是在针对低端硬件(例如微控制器)时,这是一项开销。但是,它在许多用例中都非常有用。 删除QML版本控制。 通过简化QML中的某些查找规则并更改上下文属性的工作方式,我们可以消除QML中版本控制的需要。反过来,这将导致QML引擎的大幅简化,大大简化我们维护Qt Quick的工作量,并为我们的用户简化QML和Qt Quick的使用 消除QObject和QML之间的数据结构重复。当前,在我们的元对象系统和QML之间有很多数据结构被重复,从而降低了启动性能并增加了内存使用率。通过统一这些数据结构,我们将能够减少大部分开销。 避免运行时生成的数据结构。这与之前的观点有关,在此之前,当前正在运行时生成许多这些重复的数据结构。应该完全有可能在编译时生成它们中的大多数。 支持将QML编译为高效的C ++和本机代码。通过强大的键入和更简单的查找规则,我们可以将QML转换为高效的C ++和本机代码,从而显着提高运行时性能 支持隐藏实施细节。 长期以来,“私有”方法和属性一直需要能够隐藏QML组件中的数据和功能。 更好的工具集成。 我们当前用于QML的代码模型通常是不完整的,使得重构和在编译时检测错误很难甚至不可能。通过上述更改,应该可以提供可以与C ++竞争的编译时诊断程序,并且可以大大改善重构支持。 03 下一代图形 自从我们执行Qt 5.0以来,图形领域发生了很多变化,导致我们必须对图形堆栈进行重大更改才能保持竞争力。 在Qt 5中,我们使用OpenGL作为3D图形的统一API。从那时起,已经定义了许多新的API。Vulkan是Linux上OpenGL的指定继任者,苹果正在推动Metal,微软拥有Direct 3D。这意味着Qt将来将不得不与所有这些API无缝协作。为了使之成为可能,必须定义一个抽象层来抽象图形API(例如用于平台集成的QPA),称为渲染硬件接口(RHI)。我们将需要在该层之上建立所有渲染基础结构(QPainter,Qt Quick Scenegraph和3D支持)。 一组不同的图形API也导致我们必须支持不同的着色语言。Qt着色器工具模块将帮助我们在编译和运行时交叉编译着色器。 3D扮演着越来越重要的角色,而我们当前的产品还没有统一的解决方案来创建同时包含2D和3D元素的UI。目前,将QML与来自Qt 3D或3D Studio的内容集成起来很麻烦,并且会导致性能开销。另外,不可能在2D和3D内容之间逐帧同步动画和过渡。 3D内容与Qt Quick的新集成旨在解决此问题。在这种情况下,全新的渲染器将允许一起渲染2D和3D内容,并支持两者之间的任意嵌套。这将把QML变成我们用于3D UI的UI定义语言,并且不再需要UIP格式。我们将在Qt 5.14中提供具有3D支持的“新” Qt Quick的技术预览,更多信息将在单独的博客文章中提供。 最后,新的图形堆栈需要有合适的图形资产管道支持,以便在编译时为目标硬件和相关用例做好准备。将PNG文件转换为压缩的纹理,将其中的许多文件编译为纹理地图集,将着色器和网格转换为优化的二进制格式等等。 我们还旨在为Qt 6带来一个统一的主题/样式引擎,这将使我们能够在Qt Widgets和Qt Quick的桌面和移动平台上获得原生的外观。 04 统一一致的工具 我们使用Qt 3D Studio和Qt Design Studio将用于创建用户界面的图形工具分为两部分。此外,Qt 3D Studio与Qt的其余部分略微断开连接,从而导致许多重复的工作。 我们将把Qt 3D Studio所需的功能合并回Design Studio,以统一这些功能。Design Studio与Qt Creator共享大量代码和应用程序/插件框架,从而提供了出色的设计体验,并为我们提供了弥合设计人员与开发人员之间鸿沟的工具。 设计工具还需要与内容创建工具(例如Photoshop,Sketch,Illustrator,Maya,3D Max等)进行良好的集成。 开发人员工具需要大量关注和关注,以便我们可以为C ++,QML和Python提供一流的支持。统一的工具产品还意味着开发人员可以轻松地在Qt Creator中使用设计功能,并且UX设计人员可以从开发人员工具的功能中受益,例如编译项目或在设备上进行测试。 作为Qt 5中使用的构建系统,QMake具有许多怪异和局限性。对于Qt 6,我们的目标是使用CMake作为标准的第三方构建系统来构建Qt本身。到目前为止,CMake是C ++领域中使用最广泛的构建系统,因此迫切需要与其更好地集成。我们将继续在QMake上支持我们的用户,但不会进一步开发它或使用它来构建Qt框架本身。 ![]() 05 增强我们的C++ API 过去几年,C ++发生了很大变化。虽然我们必须将Qt 5.0基于C ++ 98,但是现在我们可以依靠C ++ 17来实现Qt6。这意味着C ++提供了很多其他功能,而当我们使用Qt 5时,这些功能是不可用的。我们使用Qt 6的目标必须是更好地与该功能集成,而又不失去向后兼容性。 对于Qt 6,我们的目标是使Q ++和Qt Quick引入的一些功能可从C ++获得。我们致力于为QObject和相关类引入新的属性系统,将来自QML的绑定引擎集成到Qt的核心中,并使其可用于C ++。新的属性系统和绑定引擎将大大减少绑定的运行时开销和内存消耗,并使Qt的所有部分(不仅是Qt Quick)都可以访问它们。 06 语言支持 在Qt 5.12中,我们引入了对Python的支持,并且通过Qt for WebAssembly将浏览器作为新平台添加。在发布6.0之后,保持并进一步扩展跨平台关注将是Qt 6系列的重要组成部分。 07 与Qt5的兼容性和增量改进 与旧版本的兼容性非常重要,并且是我们开发Qt 6时的主要要求。使用我们的框架编写了数十亿行代码,因此,我们所做的任何不兼容的更改都会给用户带来成本。此外,对Qt 6的更改需要用户付出的工作越多,采用速度就越慢,这将导致我们一方维护Qt 5的最新版本的成本增加。 因此,我们应力求避免以触发用户代码库中的编译时或运行时错误的方式破坏Qt。如果必须破坏兼容性,则在运行时发生静默破坏时,编译时错误会更可取(因为它们很难检测到)。 尽管确实需要删除Qt的某些不推荐使用的部分,但是我们需要确保用户具有所需的功能。这意味着关键功能(例如Qt Widgets和我们大部分用户使用的其他部件)将保持可用。 我们计划对核心类和功能进行许多增量改进,这是Qt 5系列无法做到的。目的是保持完全的源代码兼容性,但是由于我们可以打破与Qt 6的二进制兼容性,因此我们可以进行很多清理和改进,这些是Qt 5中无法完成的。 尽管如此,我们仍需要前进,Qt 6需要进行一些房屋清洁。我们将删除Qt 5中已弃用的大多数功能(功能,类或模块)。这种房屋清洁将有助于释放开发人员的时间。从长远来看,使我们可以更加专注于维护和最新的代码库。 但是,从那些已弃用的部件上移植下来必须尽可能简单,并且我们的用户可以使用Qt 5.15 LTS逐步实现这一目标。我们的目标应该是使Qt 6与Qt 5.15 LTS足够兼容,以便人们可以轻松维护可同时针对两个版本进行编译的大型代码库。 08 市场和技术产品结构 除了改进Qt框架和工具之外,我们的目标是为组件和开发工具创建新的市场。市场将集中于我们的直接用户开发和设计应用程序和嵌入式设备,而不是针对消费者。因此,它将成为Qt生态系统的中心集结点。它将为第3方提供一个发布其对Qt的附加内容的地方,从而允许其免费和付费内容。 在过去的几年中,Qt取得了长足的发展,以至于交付新版本的Qt是一项艰巨的任务。借助Qt 6,您有机会重组我们的产品,并拥有一个包含基本框架和工具的较小型核心产品。我们将利用市场来提供我们的附加框架和工具,而不是与核心Qt产品紧密结合在一起。这将使我们在何时以及如何交付产品时具有更大的灵活性,并使我们能够取消某些加载项的发布计划。 ![]() ● 假期没及时回老板消息,被罚款.. ● 扎心,C++到底还能干什么? ● [嗑药安利] C/C++ 开发神器 —— CLion ● 蟒蛇plus —— C++与Python3交互 ● 随手摘分享 ![]() 你点的每个赞,我都认真当成了喜欢 ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:Qt开发者中心,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |