大数跨境
0
0

【麒麟在线讲堂】从麒麟天气适配主题颜色视角介绍GSettings配置文件

【麒麟在线讲堂】从麒麟天气适配主题颜色视角介绍GSettings配置文件 优麒麟
2021-03-02
2


前言

上期我们介绍了麒麟天气的主要功能,重点说明了其获取网络实时数据的部分。这次,我们以麒麟天气主题适配过程为例,对麒麟天气用到的GSettings配置文件进行介绍。

安装编程开发依赖包:

$ sudo apt install debhelper (>=9) qtbase5-dev qt5-qmake qtchooser qtscript5-dev qttools5-dev-tools qtbase5-dev-tools libgeoip-dev libx11-dev libGSettings-qt-dev pkgconf

由于麒麟天气在开发初期使用的是QSS来设置样式,需要使用监听主题GSettings配置文件变化的方式适配主题。


麒麟天气适配主题时主要有以下两个过程:

1.监听主题变化

2.为麒麟天气设置适配主题的样式


1
监听主题变化

      在进行这个过程之前,先对GSettings进行介绍。

      GSettings配置文件可以保存应用程序的配置信息,由schema 文件所声明(schema文档其实是一个规范的xml文档)。但schema文件并不能直接被GSettings使用,需要用glib-compile-schemas编译器将schema文件编译为二进制文件。

      示例:文件的扩展名必须是.gschema.xml

      QGSettings的具体使用步骤:

      主题的配置文件由主题创建,而麒麟天气只是监听,所以不需要自己创建GSettings配置文件。下文关于GSettings配置文件的创建部分仅做功能介绍,并没有在适配主题的过程中用到。


创建并引入GSettings配置文件

首先,依规范,写一个自己的程序的*.gschema.xml文件。

然后,将写好的*.gschema.xml文件复制到特定文件夹下,再用glib-compile-schemas 将它编译。路径一般为/usr/share/glib-2.0/schemas。

在具体开发时,在.pro文件中进行路径设置(将配置文件放在特定路径下)

      有一个*.gschema.xml文件:

schemes.file = data/*.gschema.xml

schemes.path = /usr/share/glib-2.0/schemas/

INSTALLS += schemes

在debian目录下编译刷新

在debian目录下创建*.postinst文件,在*.postinst文件中写入以下命令编译刷新系统的GSettings。

glib-compile-schemas /usr/share/glib-2.0/schemas

      另外,还需要在debian目录的control文件中加入GSetting的依赖:

Build-Depends: libGSettings-qt-dev,

 pkgconf,


GSettings的几个操作

    (1)使用GSettings的前期配置

在开始使用GSettings之前,需要进行以下操作:

*.pro文件中要写入:

CONFIG += link_pkgconfig

PKGCONFIG += GSettings-qt

      在头文件中要写入schema id:

#define FITTHEMEWINDOW "schema id"

      在mainwindow.h中:

#include <QGSettings>

QGSettings *m_pThemeStyle= nullptr;


    (2)写入和读取

      读取主题设置:get:获取schema中指定的key值。

nowThemeStyle = m_pThemeStyle->get("key name").toString();

      对配置文件的写入:set:设置schema中指定的key值。

m_pThemeStyle->set("key name", str);

(当然,外部不能随意更改主题配置文件,只是作为写入的用法演示,str为你想写入的内容,要遵循该GSettings创建者制定的规范。)


     (3)监听系统主题变化,切换麒麟天气配置状态

      监听事件改变主要就是监听key值的改变。在主题的配置文件中,当名为key name的key的值变化时,就意味着当前主题发生改变。这时我们只要判断当前是什么主题,来对应的切换麒麟天气的风格即可。

      GSettings提供了changed信号来发送key改变的事件。

//监听key的value是否发生了变化

        connect(m_pThemeStyle, &QGSettings::changed, this, [=] (const QString &key)

        {

            if (key == "key name")

            {

                qDebug() << "执行对应的功能";

            }

        });


2
麒麟天气主题适配样式

在监听到系统主题变化后,根据设计来修改麒麟天气的背景颜色等,这里不再详细介绍。

     

 默认或浅色主题

深色主题或夜间模式



往期精选 | Selection in the past

KDE & Gnome 携手优麒麟招募 LAS 2021 全球讲师

优麒麟硬件适配中心上线

2021纳新】优麒麟社区欢迎你的加入
CrossOver正式版来了,微信、QQ上架麒麟软件商店!

↓↓↓  点击下方“阅读原文”,查看优麒麟国际排名~

【声明】内容源于网络
0
0
优麒麟
优麒麟公众账号,用于发布优麒麟(UKylin)官方认可的信息。
内容 232
粉丝 0
优麒麟 优麒麟公众账号,用于发布优麒麟(UKylin)官方认可的信息。
总阅读103
粉丝0
内容232