玖玖资源站亚洲av_日本乱偷中文字幕一二三区_久久这里只有精品98_亚洲特级黄片视频_男女很舒服爽视频免费_国产一二三四2021精字窝_国产高潮白浆一区_自拍日本高清三级_秘书高跟黑色丝袜国产在线_亚洲A v永久无码精品网站色欲

NEWS

新聞

了解優(yōu)麒麟最新資訊,關注社區(qū)和產(chǎn)品動態(tài)。

NEWS

Learn about the latest news.

干貨分享|UKUI 主題框架實戰(zhàn)技巧

2021-09-22 18:10:47

優(yōu)麒麟(Ubuntu Kylin)

UKUI 主題框架的實現(xiàn)并非想象中那么簡單,但世上無難事只怕有心人,首先咱們需要了解一個關鍵接口 QPA,接著通過學習具體的類了解如何創(chuàng)建并深入使用平臺主題。本文中奇奇為大家準備了豐富的控件知識介紹,并且還有 UKUI 實例展示和實戰(zhàn)環(huán)節(jié),一起來了解學習下吧~


一、平臺主題(QPA)介紹

QPA 即 Qt Platform Abstraction,是 Qt5 里面的平臺抽象層,用以取代 Qt for Embedded Linux 以及 Qt4 中的平臺接口。

QPA 插件通過定義 QPlatform 開頭的一系列類的子類實現(xiàn),其中有兩個根類,QPlatformIntegration 和 QPlatformTheme,前者用于窗口系統(tǒng)的集成,后者用于更深層次的平臺主題化和集成,QStyle 不屬于 QPA,旨在在未修改的 Qt 應用程序中使用盡可能多的平臺主題設置,它允許 Qt 應用程序盡可能地適應環(huán)境。


二、平臺主題的創(chuàng)建

在 Linux 系統(tǒng)中我們可以通過 QPlatformThemePlugin 類來創(chuàng)建自己的平臺主題。例如 UKUI 的平臺主題創(chuàng)建方法--如圖 1 所示。要使系統(tǒng)走我們的平臺主題,需要將環(huán)境變量“QT_QPA_PLATFORMTHEME”設置為 json 文件中的 keys 值。

例如在 UKUI 中由 ukui-session-manager 設置環(huán)境變量“QT_QPA_PLATFORMTHEME = ukui”。

優(yōu)麒麟(Ubuntu Kylin)

圖1 設置 keys 值

此外插件都需要一個包含描述插件的元數(shù)據(jù)的 json 文件 。例如 UKUI 平臺主題 json 文件,如圖 2 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖2 json 文件中的 keys 值

我們還需要將平臺插件編譯成庫安裝在 Qt 加載平臺插件的指定目錄,這樣 Qt 才能加載到我們自己寫的平臺插件。UKUI 安裝平臺插件的方法是在 pro 文件中指定了庫安裝的位置,如圖 3 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖3 安裝平臺插件的指定目錄

三、平臺主題常用接口分析

1、是否使用平臺對話框

virtual bool usePlatformNativeDialog(DialogType type) const;

是否使用平臺對話框。這里只能判斷出 4 種平臺對話框,分別是:文件對話框 FileDialog、顏色對話框 ColorDialog、字體對話框 FontDialog、消息對話框 MessageDialog。

2、系統(tǒng)平臺對話框

virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;

該接口返回了平臺對話框 Helper,通過 helper 連接了平臺對話框與 Qt 的對話框。例如 UKUI 自寫的平臺消息彈窗--如圖 4 所示,效果展示如圖 5、6 所示,圖 5 為原來的 QMessageBox 界面,圖 6 為平臺消息彈窗。需要與上函數(shù)同時設置才能展示平臺對話框。

優(yōu)麒麟(Ubuntu Kylin)

圖4 平臺消息彈窗

優(yōu)麒麟(Ubuntu Kylin)

圖5 原效果展示圖

優(yōu)麒麟(Ubuntu Kylin)

圖6 現(xiàn)效果展示圖

3、創(chuàng)建系統(tǒng)托盤

virtual QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const;

QSystemTrayIcon 的工廠函數(shù)。如果平臺集成不支持創(chuàng)建任何系統(tǒng)托盤圖標,此函數(shù)將返回 0。

4、調(diào)色板

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

創(chuàng)建對應 Palette 類型的調(diào)色板。

5、字體

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

創(chuàng)建對應 Font 類型的字體 QFont。

6、主題設置

virtual QVariant themeHint(ThemeHint hint) const;

返回平臺的主題設置。ThemeHint 定義了可以設置的主題屬性。


下面介紹一些重要的主題設置控件。

  • StyleNames 主題(系統(tǒng)控件的 Style);

  • SystemIconThemeName 系統(tǒng)圖標主題(QIcon 搜索的圖標目錄);

  • IconThemeSearchPaths 系統(tǒng)圖標搜索路徑(QIcon 搜索目錄);

  • SystemIconFallbackThemeName 系統(tǒng)圖標搜索備選目錄(QIcon 搜索備選目錄)(當在系統(tǒng)圖標搜索目錄下搜索不到圖標時,系統(tǒng)會在備選目錄下搜索對應的圖標。在 Linux 系統(tǒng)開發(fā)下的自研應用一般將自帶的圖標放在該路徑下。Linux 中該目錄為"hicolor");

  • TextCursorWidth 光標寬度(默認1px);

  • StartDragDistance 拖放操作開始前,按住按鈕必須移動鼠標的距離,單位為像素(默認10px);

  • StartDragTime 拖放操作開始前必須按住鼠標按鈕的時間,單位為毫秒(默認500ms);

  • PasswordMaskCharacter 密碼模式下輸入文本輸入字段的字符(默認為 QChar(0x2022));

  • PasswordMaskDelay 在密碼模式下文本輸入字段中無遮擋地顯示一個鍵入字母的時間,單位為毫秒;

  • MouseDoubleClickInterval 雙擊和連續(xù)兩次鼠標點擊的時間限制,單位為毫秒;

  • CursorFlashTime 文本光標的閃動(閃爍)時間,單位為毫秒(默認1000ms)。


以 UKUI 平臺主題的主題設置為例,如圖 7 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖7 主題設置

7、基礎圖標

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

設置系統(tǒng)中 size 大小的 StandardPixmap 類型(具體參考 Qt 源碼中枚舉 StandardPixmap)基礎 Pixmap 圖片。

8、圖標引擎

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

設置系統(tǒng)中 QIcon 的圖標引擎。圖標引擎為 QIcon 提供渲染功能。每個圖標都有一個相應的圖標引擎,負責以要求的尺寸、模式和狀態(tài)繪制圖標。具體可參考 Qt 中 QIconEngine 的文檔:https://doc.qt.io/qt-5/qiconengine.html#details 


四、平臺主題在UKUI中的使用

下面介紹 3 種在 UKUI 環(huán)境下使用指定的平臺主題的方法。

首先我們得確保系統(tǒng)中安裝了自己的平臺主題庫。以本機環(huán)境及 UKUI 的平臺主題為例進行查看,如圖 8 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖8 顯示已安裝的平臺主題庫

方法一:終端指定環(huán)境變量

export QT_QPA_PLATFORMTHEME=ukui 

只有在終端修改方可生效,如圖 9 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖9 在終端修改環(huán)境變量

展示效果如圖 10 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖10 展示效果

方法二:應用啟動時指定平臺主題

我們可以用終端啟動 Qt 應用時后接參數(shù)-platformtheme [平臺主題名(例如:gtk2、gtk3、ukui,社區(qū)的有 kde)] -style [主題名(例如:fusion、gtk2、ukui 社區(qū)的有 breeze、oxygen)]

例如: peony -platformtheme gtk2 -style fusion

展示效果如圖 11 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖11 展示效果

方法三:應用代碼中設置環(huán)境變量

在 QApplication 初始化之前設置 qputenv("QT_QPA_PLATFORMTHEME", "[平臺主題]");

示例如圖 12 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖12 展示效果

展示效果如圖 13 所示。

優(yōu)麒麟(Ubuntu Kylin)

圖13 展示效果