Что такое XML-файл схемы в папке data/glib-2.0 моего приложения Quickly?

Я создал приложение Ubuntu с помощью Quickly, и я вижу файл XML в папке data/glib-2.0 корня моего проекта, и я не совсем уверен, для чего это нужно. 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 определяет набор ключей, которые вы можете использовать в своем приложении для хранения пользовательских настроек.

В схеме элемента вы заметите два атрибута: идентификатор и путь. Идентификатор - это то, что вы используете для ссылки на схему в коде при создании экземпляра объекта настроек. Путь, где хранятся ключи.

Вы можете найти настройки, установив dconf-tools пакет и работает dconf-editor, Затем перейдите к узлу, указанному выше. Узел в XML в вопросе (/net/launchpad/sample-application) будет здесь:

Окно dconf-editor в пути / net / launchpad / sample-application

Схема используется против API GSettings. Вы можете увидеть документы на основе GTK C здесь: http://developer.gnome.org/gio/stable/GSettings.html. Это часть модуля Gio

Что касается кода.

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

Это создает объект GSettings, который вы можете использовать для привязки виджетов для хранения настроек. Параметр должен точно соответствовать атрибуту id элемента схемы в XML.

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

Это создает связь между example введите схему, чтобы text собственность widget, Значение, которое передается ключу, является текстовым свойством указанного виджета. Для GtkEntry текст является наиболее очевидным свойством для использования. Поскольку оно связано, при каждом изменении значения свойства в окне настроек оно автоматически обновляется. Последний параметр определяет, в каком направлении работает привязка - см. Документацию для получения дополнительной информации.

Тип, указанный в XML для ключа, должен соответствовать одному из доступных параметров. Как правило, один символ, который вы увидите на фоне определенной константы. Например, для логического:

#define 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")
Другие вопросы по тегам