Qt6官方最新消息:桌面样式Qt quick Controls 2支持大多控件,委托更少,运行更流畅

天大地大妈咪最大 提交于 2020-11-18 17:38:12

Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。赶快点击下载Qt最新试用版>>

Qt Quick Controls 1是我们第一个QML的UI框架。这些控件主要是用QML编写的,没有使用太多的C++。当时,QML还是一种新技术,这意味着我们在性能设计方面没有足够的经验,不知道会有什么结果。因此,造型API在设计上最终是低效的,它有很多肥大的委托,在控制逻辑和造型上都使用了大量的JavaScript、绑定、自省、Loaders和QObjects。它还存在对Qt Widgets的链接依赖,以获得本地的样式和基于Widget的对话框。而如果没有我们今天的QML编译器,这一切最终都是一种相当缓慢和混乱的方法。Qt Quick Controls 2是当我们意识到它在嵌入式硬件上的表现也不好时重新考虑解决方案。

Qt Quick Controls 2

对于 Controls 2,我们的基本想法是将大部分的实现从 QML 转移到 C++。通过这样做,我们的目标是尽可能地精简代表,而不是从C++中去做繁重的工作。这包括所有的控制逻辑、鼠标、触摸、事件处理、API等等。只有视觉效果被留在QML中定义。这就导致了精简的委托,更少的运行时开销,更少的内存使用,更清晰的代码流,以及更快的执行速度。

但有一点是目前为止一直缺少的,那就是对原生桌面样式的支持。Controls 2的主要动机是在嵌入式设备上实现良好的性能,由于我们有桌面的Qt Widgets,我们算是接受了一些基本的桌面功能缺失。我们提供了有开放文档的样式(Universal,Material),并使创建自定义的样式变得容易。但现在,自Qt 5.12以来,Controls 1已经被废弃,并且也将被排除在Qt 6二进制包之外,现在是时候重新开发面向桌面的样式了。

本地桌面风格

在 Qt 6.0 中,我们为 Controls 2 增加了两种新的桌面风格:Windows 和 macOS。与现有的Fusion风格使用Qt Quick基元不同,这些新风格使用QStyle进行绘制。原因是它仍然能很好地与 "低级 "平台API对接,以获得真正的原生样式。但我们并没有与Widgets共享QStyle,而是专门为Controls制作了一份专属副本。后者听起来可能很奇怪,因为我们很自然地认为共享一个代码库是一种更简单的方法。但原因有几个:首先,我们不想破坏Widgets或任何第三方的风格。而且我们不能在不破坏源码兼容性的情况下将QStyle从Widgets中剔除。QStyle不仅在它的API中到处都有对Widgets的引用,而且它还直接使用了Widgets本身的枚举和常量。同时,我们也不希望 Controls 在未来很长一段时间内对 Widgets 产生依赖性。

另一个原因是,我们希望能够自由地在任何我们认为合适的地方修改代码。我们可以通过很多方法来优化QStyle-copy,以更好地适应Qt Quick场景图和Controls styling API。其中一个变化是,我们只使用QStyle来绘制控件的背景。同样的背景贴图将被缓存并重用于所有相同类型的控件,并在QSGNinePatchNode的帮助下缩放到正确的大小。文本和前景将使用正常的QML渲染在上面。而对于所有这样的差异,我们希望能够在不受限制或担心保持与Widgets的兼容性的情况下实现它们。出于同样的原因,我们使用QStyle进行绘制是一个私人的实现细节。Controls已经有了一个很好的样式API,我们不想再引入和维护第二个。

最后,我们不一定要让原生样式看起来和Widgets完全一样。对于一些控件,我们使用了一种混合的方法,用QML在QStyle绘制的纹理上添加动画和渐变效果。最后,我们真正想要的是让原生样式具有流畅的性能,并且尽可能地看起来 "原生",而不一定要像Widgets一样。

Qt 6.0准备了什么?

对于 Qt 6.0,大多数控件都会被新的桌面样式所支持。但并不是所有的控件都支持。将被遗漏的是那些目前在QStyle中还没有实现的控件,比如Switch或RangeSlider。它们仍然可以使用,但将用Fusion风格绘制。缺失的控件将在即将发布的Qt中逐步得到支持,原生对话框和菜单也是如此。如果我们看得更远,我们的计划包括提供更多以桌面为中心的控件,这些控件你可能会在今天的Widgets或本地工具包中找到。

所以,还有很多事情要做。但是,我们认为新的桌面风格是未来几年内让Controls与Widgets在桌面开发方面平起平坐的第一步。

下面是使用新的桌面样式运行的Qt Quick Controls 2应用程序的截图。需要注意的是,这仍然是一项持续的工作,任何小问题都会在最终发布之前被解决。

Qt商业组件Qtitan推荐:

  • QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart | 下载试用 : 是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面操作系统。
  • QtitanDataGrid| 下载试用 : 适用于Qt的商业化DataGrid 组件,使得表格数据可以直接面向终端用户完全集成了QtDesigner,极易适应其他相似开发环境,保证100%兼容Qt GUI。

感谢您的阅读,希望这篇文章能带给你一定的帮助!如果这篇文章没能满足你的需求、点击获取更多文章教程

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!