我的 Quickly 应用程序的 data/glib-2.0 文件夹中的架构 XML 文件是什么?

我的 Quickly 应用程序的 data/glib-2.0 文件夹中的架构 XML 文件是什么?

我使用 Quickly 创建了一个 Ubuntu 应用程序,我可以在项目根目录的 data/glib-2.0 文件夹中看到一个 XML 文件,但我不太清楚它是用来做什么的。XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="sample-application">
  <schema id="net.launchpad.sample-application" path="/net/launchpad/sample-application/">
    <key name="example" type="s">
      <default>''</default>
      <summary>Sample setting</summary>
      <description>Longer description of this sample setting.  Talk about allowed values and what it does.</description>
    </key>
  </schema>
</schemalist>

此外,在使用新应用程序创建的默认首选项对话框代码中,我可以看到以下代码:

settings = Gio.Settings("net.launchpad.sample-application")
widget = self.builder.get_object('example_entry')
settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT)

我不知道这是做什么。

答案1

XML 文件定义了一组键,您可以在整个应用程序中使用这些键来存储用户偏好设置。

在元素架构中,您将注意到两个属性:id 和 path。id 是您在实例化设置对象时在代码中引用架构时使用的。path 是存储键的位置。

dconf-tools您可以通过安装包并运行来找到设置dconf-editor。然后导航到上面定义的节点。问题 (/net/launchpad/sample-application) 中的 XML 中的节点将在此处:

dconf-editor 窗口位于路径 /net/launchpad/sample-application

该模式用于 GSettings API。您可以在此处查看基于 GTK C 的文档:http://developer.gnome.org/gio/stable/GSettings.html。这是Gio模块

至于代码。

settings = Gio.Settings("net.launchpad.sample-application")

这将创建 GSettings 对象,您可以使用该对象绑定小部件以存储设置。该参数需要与 XML 中的 schema 元素的 id 属性完全匹配。

settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT)

example这将在架构中的键与text的属性之间创建绑定widget。传递给键的值是指定小部件的文本属性。对于 GtkEntry,文本是最明显的属性。因为它被绑定了,所以每当您在首选项窗口中更改属性的值时,它都会自动更新。最后一个参数决定绑定的工作方向 - 请参阅文档了解更多信息。

您在 XML 中为键指定的类型应该与以下之一匹配可用选项。通常是一个字符,您将在定义的常量中看到它。例如对于布尔值:

#定义 G_VARIANT_TYPE_BOOLEAN ((const GVariantType *)“b”)

所以布尔值等于b

因此,假设您想要一个布尔键,您可以在架构元素下方与其他键一起添加以下内容:

<key name="complete" type="b">
  <default>false</default>
  <summary>Whether the task is complete</summary>
  <description>This key is used to determine if a particular part of the application is complete or not</description>
</key>

然后像这样绑定活动属性:

# Get the widget (named chk_complete)
complete = self.ui.chk_complete
# Bind the property
settings.bind("complete", complete, "active", Gio.SettingsBindFlags.DEFAULT)

然后就可以使用 get 函数访问特定于数据类型的设置。例如

settings = Gio.Settings("net.launchpad.sample-application")
example = settings.get_string("example")
complete = settings.get_boolean("complete")

相关内容