关于linux:干货分享|UKUI-主题框架实战技巧

86次阅读

共计 2985 个字符,预计需要花费 8 分钟才能阅读完成。

UKUI 主题框架的实现并非设想中那么简略,但世上无难事只怕有心人,首先咱们须要理解一个要害接口 QPA,接着通过学习具体的类理解如何创立并深刻应用平台主题。本文中奇奇为大家筹备了丰盛的控件常识介绍,并且还有 UKUI 实例展现和实战环节,一起来理解学习下吧~

一、平台主题(QPA)介绍

QPA 即 Qt Platform Abstraction,是 Qt5 外面的平台形象层,用以取代 Qt for Embedded Linux 以及 Qt4 中的平台接口。

QPA 插件通过定义 QPlatform 结尾的一系列类的子类实现,其中有两个根类,QPlatformIntegration 和 QPlatformTheme,前者用于窗口零碎的集成,后者用于更深层次的平台主题化和集成,QStyle 不属于 QPA,旨在在未修改的 Qt 应用程序中应用尽可能多的平台主题设置,它容许 Qt 应用程序尽可能地适应环境。

二、平台主题的创立

在 Linux 零碎中咱们能够通过 QPlatformThemePlugin 类来创立本人的平台主题。例如 UKUI 的平台主题创立办法 – 如图 1 所示。要使零碎走咱们的平台主题,须要将环境变量“QT\_QPA\_PLATFORMTHEME”设置为 json 文件中的 keys 值。

例如在 UKUI 中由 ukui-session-manager 设置环境变量“QT\_QPA\_PLATFORMTHEME = ukui”。

图 1 设置 keys 值

此外插件都须要一个蕴含形容插件的元数据的 json 文件。例如 UKUI 平台主题 json 文件,如图 2 所示。

图 2 json 文件中的 keys 值

咱们还须要将平台插件编译成库装置在 Qt 加载平台插件的指定目录,这样 Qt 能力加载到咱们本人写的平台插件。UKUI 装置平台插件的办法是在 pro 文件中指定了库装置的地位,如图 3 所示。

图 3 装置平台插件的指定目录

三、平台主题罕用接口分析

1、是否应用平台对话框

virtual bool usePlatformNativeDialog(DialogType type) const;

是否应用平台对话框。 这里只能判断出 4 种平台对话框 ,别离是:文件对话框 FileDialog、色彩对话框 ColorDialog、字体对话框 FontDialog、音讯对话框 MessageDialog。

2、零碎平台对话框

virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;

该接口返回了平台对话框 Helper,通过 helper 连贯了平台对话框与 Qt 的对话框。例如 UKUI 自写的平台音讯弹窗 – 如图 4 所示,成果展现如图 5、6 所示,图 5 为原来的 QMessageBox 界面,图 6 为平台音讯弹窗。须要与上函数同时设置能力展现平台对话框。

图 4 平台音讯弹窗

图 5 原成果展现图

图 6 现成果展现图

3、创立系统托盘

virtual QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const;

QSystemTrayIcon 的工厂函数。如果平台集成不反对创立任何系统托盘图标,此函数将返回 0。

4、调色板

virtual const QPalette *palette(Palette type = SystemPalette) const;

创立对应 Palette 类型的调色板。

5、字体

virtual const QFont *font(Font type = SystemFont) const;

创立对应 Font 类型的字体 QFont。

6、主题设置

virtual QVariant themeHint(ThemeHint hint) const;

返回平台的主题设置。ThemeHint 定义了能够设置的主题属性。

上面介绍一些重要的主题设置控件。

  1. StyleNames 主题(零碎控件的 Style);
  2. SystemIconThemeName 零碎图标主题(QIcon 搜寻的图标目录);
  3. IconThemeSearchPaths 零碎图标搜寻门路(QIcon 搜寻目录);
  4. SystemIconFallbackThemeName 零碎图标搜寻备选目录(QIcon 搜寻备选目录)(当在零碎图标搜寻目录下搜寻不到图标时,零碎会在备选目录下搜寻对应的图标。在 Linux 零碎开发下的自研利用个别将自带的图标放在该门路下。Linux 中该目录为 ”hicolor”);
  5. TextCursorWidth 光标宽度(默认 1px);
  6. StartDragDistance 拖放操作开始前,按住按钮必须挪动鼠标的间隔,单位为像素(默认 10px);
  7. StartDragTime 拖放操作开始前必须按住鼠标按钮的工夫,单位为毫秒(默认 500ms);
  8. PasswordMaskCharacter 明码模式下输出文本输出字段的字符(默认为 QChar(0x2022));
  9. PasswordMaskDelay 在明码模式下文本输出字段中无遮挡地显示一个键入字母的工夫,单位为毫秒;
  10. MouseDoubleClickInterval 双击和间断两次鼠标点击的工夫限度,单位为毫秒;
  11. CursorFlashTime 文本光标的闪动(闪动)工夫,单位为毫秒(默认 1000ms)。

以 UKUI 平台主题的主题设置为例,如图 7 所示。

图 7 主题设置

7、根底图标

virtual QPixmap standardPixmap(StandardPixmap sp, const QSizeF &size) const;

设置零碎中 size 大小的 StandardPixmap 类型(具体参考 Qt 源码中枚举 StandardPixmap)根底 Pixmap 图片。

8、图标引擎

virtual QIconEngine *createIconEngine(const QString &iconName) const;

设置零碎中 QIcon 的图标引擎。图标引擎为 QIcon 提供渲染性能。每个图标都有一个相应的图标引擎,负责以要求的尺寸、模式和状态绘制图标。具体可参考 Qt 中 QIconEngine 的文档:https://doc.qt.io/qt-5/qicone…

四、平台主题在 UKUI 中的应用

上面介绍 3 种在 UKUI 环境下应用指定的平台主题的办法。

首先咱们得确保零碎中装置了本人的平台主题库。以本机环境及 UKUI 的平台主题为例进行查看,如图 8 所示。

图 8 显示已装置的平台主题库

办法一:终端指定环境变量

export QT\_QPA\_PLATFORMTHEME=ukui 

只有在终端批改方可失效,如图 9 所示。

图 9 在终端批改环境变量

展现成果如图 10 所示。

图 10 展现成果

办法二:利用启动时指定平台主题

咱们能够用终端启动 Qt 利用时后接参数 -platformtheme [平台主题名(例如:gtk2、gtk3、ukui,社区的有 kde)] -style [主题名 ( 例如:fusion、gtk2、ukui 社区的有 breeze、oxygen)]

例如:peony -platformtheme gtk2 -style fusion

展现成果如图 11 所示。

图 11 展现成果

办法三:利用代码中设置环境变量

在 QApplication 初始化之前设置 qputenv(“QT\_QPA\_PLATFORMTHEME”, “[ 平台主题]”);

示例如图 12 所示。

图 12 展现成果

展现成果如图 13 所示。

图 13 展现成果

正文完
 0