1、Gsetting介绍
GSettings类为应用程序设置存储和检索提供了方便的API。
读取和写入可以被认为是非阻塞的。使用GSettings读取设置通常非常快:在大致相同的数量级(但慢于)GHashTable查找。写入设置方面也非常快,但对于其他线程和其他进程来说,写入设置可能非常昂贵。许多设置后端(包括dconf)都有延迟初始化,这意味着在用户使用计算机的常见情况下,无需修改任何设置即可避免大量工作。对于dconf,在这种情况下,D-Bus服务甚至不需要启动。
GSettings 项目是由一个叫 schema 的文件所声明的,这是一个正规的 XML 文件。示例如下:
<schemalist>
<enum id="org.gtk.Test.myenum">
<value nick="first" value="1"/>
<value nick="second" value="2"/>
</enum>
<flags id="org.gtk.Test.myflags">
<value nick="flag1" value="1"/>
<value nick="flag2" value="2"/>
<value nick="flag3" value="4"/>
</flags>
<schema id="org.gtk.Test">
<key name="key-with-range" type="i">
<range min="1" max="100"/>
<default>10</default>
</key>
<key name="key-with-choices" type="s">
<choices>
<choice value='Elisabeth'/>
<choice value='Annabeth'/>
<choice value='Joe'/>
</choices>
<aliases>
<alias value='Anna' target='Annabeth'/>
<alias value='Beth' target='Elisabeth'/>
</aliases>
<default>'Joe'</default>
</key>
<key name='enumerated-key' enum='org.gtk.Test.myenum'>
<default>'first'</default>
</key>
<key name='flags-key' flags='org.gtk.Test.myflags'>
<default>["flag1","flag2"]</default>
</key>
</schema>
</schemalist>
需要注意的是(1)path 必须是两头都有 /,不然会校验失败。(2)这个文件的扩展名必须是 .gschema.xml
GSettings 只认二进制的文件,这个二进制的文件是通过一个叫做 glib-compile-schemas 的编译器生成的,如:glib-compile-schemas /usr/share/glib-2.0/schemas
2、Gsettings使用
1、你首先应该写一个 XML 规范文件,将它复制入 GSettings 会读取的一个文件夹,然后用 glib-compile-schemas 将它安装即可。
2、使用g_settings_new创建一个Gsettings对象。
3、修改Gsettings:
gint
g_settings_get_enum (GSettings *settings,
const gchar *key);
gboolean
g_settings_set_enum (GSettings *settings,
const gchar *key,
gint value);
4、绑定GObject,使用函数g_settings_bind_with_mapping。bind 函数会将某个 GObject 对象属性与一个 GSettings 键绑定,unbind 是解绑定用的。绑定后,如果写入一个值,GObject 对象会被更新,如果设置了 GObject 对象的属性,GSettings 也会更新。