Skip to content

项目简介

Yue-Lan edited this page Mar 21, 2020 · 3 revisions

Qt5UKUI简介

结合项目的实际演示

与peony的结合

相关资料整合

一些可供下载的文档

什么是Qt5UKUI

Qt5UKUI简单而言是一个platformtheme插件,它与qt5-gtk2-platformtheme的本质是相同的 (虽然在实现的思路和具体过程上已经有非常大的区别) 。

自Qt5起,Qt引入了一个重要却又经常被人忽视的概念——QPA (Platform Abstraction),它规定了若干接口,用于实现Qt可扩展和跨平台的特性,其核心思路就是通过接口+平台内部API达到一个平台上从内到外的统一。PlatformTheme是其中的重要一环,目前常见的qt platformtheme就是kde和gnome,gnome又衍生出了qt5-gtk2-platformtheme,也是目前UKUI3.0所使用的平台主题,它能够较好的统一qt和gtk应用的风格。

platformtheme主要通过插件的形式注入到QApplication中,每一个平台主题插件一般都会提供自己的QStyle用于统一Qt应用与其它平台应用的外观,可能还会提供原生对话框,全局菜单等较为先进的功能。Qt5规定了一个环境变量QT_QPA_PLATFORMTHEME,这个变量用于告知QApplication如何加载平台插件。

为什么选择它

我们在早期使用qt5-gtk2-platformtheme作为平台插件时,已经能够比较好的实现qt与gtk应用风格的统一了,但是自新UKUI3.0设计稿发布以来,这种统一性被完全破坏了,我们几乎无法通过原有技术路线在满足设计需求的同时实现整个桌面风格的统一,我非常担心如果这样下去我们会走到一条黑路上去,所遇到的困难会更多,所以必须另寻它法。

究竟怎么样展开新UKUI3.0的工作,我思考了很久。

首先,我认为只针对自研应用进行样式调整是极为不妥的。每个设计人员和开发人员都有不同的理解,无法保证风格的统一,同时如果每次设计稿重构如果都需要对应用的样式进行调整,开发的效率就会变低,不利于快速迭代。而且每个应用定义了自己的风格,在风格切换时如何统一也成为了难题。这种做法看似直接和简单,其实上坑很多,不利于长远发展。

基于Qt构建自己的SDK目前看也并不现实,因为它需要的时间比可能远比上面的做法多,并且也不能够保证与原生Qt应用的风格统一,单从主题的方面看,如果不能统一系统自带开源应用和自研软件,就意味着我们必须在维护SDK的同时基于SDK开发一整套桌面环境应用,才可能达到我们的目的。从兼容性看,构造一套与社区兼容的图形开发套件几乎是不可能的。

用排除法,使用平台插件的做法从目前看来是最合理的, 由于平台主题是Qt5提供的接口,我们首先不必担心风格不统一的问题,社区的应用和自研的应用能够很好的统一起来,这也是目前qt5-gtk2-platformtheme为我们做的事情;第二点是我们能够通过自己的platformtheme实现对Qt应用主题的定制,使得整个桌面环境更加贴近UKUI3.0的设计稿,同时基于主题的修改能够实现快速迭代,现在的自研应用越来越多,基于主题重构能够使我们需要在重构UI时面临的工作更加集中;第三点,也是我个人最看重的一点,它能够以兼容的形式展开工作,这意味着我们能够与上游社区接轨,我们可以在KDE上使用UKUI主题,反之,我们也能够在优麒麟上使用不同的qt主题,这在社区中是一个很重要的需求。

这种拥抱社区的做法正是我们曾经拥有现在却欠缺的,以目前的实际情况来看,优麒麟的发展需要回归社区,吸纳社区的精髓,而不是墨守成规,构建半封闭的体系。只有充分利用现有资源,才能够实现我们的目标。

我们可以选择平台插件+Qt开源应用+部分SDK+自研应用的方式构建UKUI3.0,比起其它方案,它的效率更高,也更贴近社区,但即使这样,我们面临的任务依然很艰巨。

怎么实现?需要注意什么?

思路的统一

不论设计人员和开发人员,都应该时刻谨记我们是在开发一个基于桌面环境的应用,在开发应用之前我们需要遵守桌面环境的共性,这样设计和开发出来的应用才能够和桌面环境融为一体。

设计规范

我分为两个方面来说:

1.普适性

桌面应用大部分的控件都是通用的,假设我们的UKUI没有自研应用,全部都是社区的应用,我们如何将这些应用变成UKUI的风格,这是我们首先需要解决的问题。理想情况下,我们的自研应用实际上只需要使用Qt的原生控件就能够实现,这样我们就实现了一个平台无关的应用,这种应用能够比较容易被社区所认同和接纳。普适性注重的不是某个应用,而是桌面环境的整体性和统一性。

对于一个主题而言,检验它的普适性的标准就是Qt原生控件在该主题下的协调性,这点可以参考主流qt社区KDE

对于一个应用而言,检验这个应用是否具有普适性的标准就是在切换主题时应用是否能够实现完全兼容。

2.扩展性

假如我们已经搭建好了自己的主题框架,能够将所有非自研的开源软件以UKUI风格展示,但是我们自研的应用仍然不能够得到期望的效果,我们就需要考虑以一种不破普适性为前提的个性扩展的方式实现。

我们的一些自研应用可能与普适性中的设计风格有较大的差异,比如任务栏和开始菜单,所以我们需要为它们另外进行设计,并且在自己的主题中实现对应的定制。

对于设计师来说,如何将设计规范和Qt控件结合起来是一个比较棘手的问题,但是我们还是得花时间和精力去做到这一点,一个符合QStyle规范的设计规范对这个项目的帮助是很大的,这也意味着开发人员能够花费最小的代价实现设计稿。

开发规范

我们过去的做法一般是通过qss来开发自研应用,虽然方便但是局限性很多,比如无法实现跟随系统主题,无法实现动画效果等,这两点在新UKUI3.0的设计需求中已经是非常致命的问题了。在qt5-ukui项目成立之后,我希望摒弃原有的开发模式,在开发时我们需要遵循新的规范。

1.尽量使用标准控件

qt5-ukui项目的初衷就是解决90%的标准控件风格问题,我们不再需要对每个qt控件进行样式的调整,直接拿来用就可以了,这有利于新人的发展。

2.对标准控件无法完成的工作,考虑组合控件实现,仍无法实现则考虑自定义主题或重写控件绘制方法

这一部分需要开发人员具有一定的功底,解决问题的手段有很多,但是如何在遵守规范的情况下将问题解决是很困难的

Gtk与Qt,应用迁移

目前Gtk与Qt没有一个比较好的统一风格的办法,我认为既然我们选择了Qt,那么我们桌面环境的应用也应该考虑向qt迁移,使用必要gtk应用(如浏览器)+开源qt应用+自研qt应用构建新UKUI3.0是理想的手段。

技术手段

要实现平台插件,当务之急,我们主要需要干这两件事:

  • 实现platformtheme插件
  • 实现平台下的style插件

目前这两个插件的雏形已经实现了,也就是已经有了一个架子,但是其中的细节是非常繁杂的,总而言之,重点在于style的调优,也就是控件的样式和动画。要实现一整套ukui主题,这一部分的工作是最为主要和繁重的,投入多少人力都不为过。

写在最后

我希望大家能够通过我提供的文档对这种围绕主题构建桌面环境的开发方式有所理解。经过数月的努力,我和志同道合的开发者们已经在文件管理器上验证了它的可行性和优势,这一块的工作可以说是开了一个漂亮的头。

然而,正如我整篇文章所强调的那样,桌面环境的构建是整个团队的工作,现在我们这个团队的工作实际上还是针对于应用而非桌面,这样带来的结果是我们的力量会变得过于分散。对于一个应用来说,现在的做法是没有问题的,但是如果将它们整合到一个桌面环境中,我们就很难形成一个规范的体系。

主题框架和主题就是想形成一种新的开发体系,对于没有接触过相关概念的开发者来说它可能过于飘渺了,但是在只要UKUI3.0下进行应用的开发到一定阶段,你就一定会接触到这些概念,然后尝试去了解它,使用它进行开发,甚至参与其中。我希望这个过程能够尽量的快一些,好让大家能够少走一些弯路。