Qt6官方最新消息:桌面样式控件大更新;委托更少,运行更流畅
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组件 。
- 表达|重磅!2021世界安防博览会官方宣贯会正式召开,百余家企业表达参展意愿
- 出炉|三星S11最新消息出炉,S10沦为百元机,星粉:服了
- 无人|无人维护?官方打脸:Element UI for Vue 3.0 来了!
- 网络|最新消息!2020年后Flash Player搭载重橙网络继续运营
- 用心|用心网友制作了一加9 Pro渲染图:细节程度堪比官方
- 信新信息技|荣耀逐步“搬家”:官方公众号主体由 “华为终端”变为 “荣耀终端”
- 跳动|收购支付牌照,字节跳动储备新域名,官方称为防恶意侵权
- 骁龙888官方美图赏:忍不住直呼666
- 人工智能|最新消息,人工智能解决了长达50年的生物学难题,一个巨大的突破
- 一家独大|网友称赣州中心城区哈啰共享单车一家独大 官方:不存在搞垄断行为