前言:上期我们介绍了麒麟天气的主要功能,重点说明了其获取网络实时数据的部分。这次,我们以麒麟天气主题适配过程为例,对麒麟天气用到的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.麒麟天气主题适配样式
在监听到系统主题变化后,根据设计来修改麒麟天气的背景颜色等,这里不再详细介绍。
默认或浅色主题
深色主题或夜间模式