GSettings、glib-compile-schemas 和 Eclipse

GSettings, glib-compile-schemas and Eclipse

我正在 Ubuntu 构建这个 Gtkmm3 应用程序并想探索 GSettings。按照“Using GSettings”页面上的说明进行操作时一切顺利,然后是时候配置 make 文件了。我使用带有 CDT (V9.10) 和 'GNU Make Builder' 的 Eclipse 2019-12 IDE 作为构建器。我对如何将 GNOME 页面中列出的宏引入 make 文件感到非常困惑。我什至尝试使用 Eclipse 将项目更改为 'C/C++ Autotools Project',但仍然缺少添加宏所需的 make 文件。使用 GNU Autotools 创建一个新项目确实创建了必要的 make 文件,但我无法让 pkg-config 使用它。

任何人都可以向我指出一些资源,这些资源解释了如何编译架构以及如何以及在何处加载生成的二进制文件(如有必要,在外部)。如果有人已经在 Linux 中使用 Eclipse IDE 制作了支持 GSettings 的 Gtkmm3 C++ 应用程序并且可以分享详细信息,我会认为自己很幸运。

终于想通了。我想我会在这里分享我的发现。实际上有人已经为 python(下面的 link)解释了这一点。

Using GSettings with Python/PyGObject

正在创建架构

对于开发人员来说,工作从为设置定义架构开始。模式是一个看起来像这样的 XML 文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE schemalist SYSTEM "gio_gschema.dtd" >
<schemalist>
    <schema id="org.gtk.skanray.emlibrary"
        path="/org/skanray/emlibrary/" gettext-domain="emlibrary">
        <key name="wave-pressure-ptrach-visible" type="b">
            <default>true</default>
            <summary>Set visibility of 'Ptrach' trace in pressure waveform.</summary>
            <description>The pressure waveform shows multiple traces where 'PAW' is always enabled and additionally 'Ptrach' can be displayed. This settings affects the visibility of the trachial pressure trace shown in this waveform channel.</description></key>
    </schema>
</schemalist>

文件名必须有“.gschema.xml”后缀。模式文件应该在项目路径中,只有这样它才会被推送到 SVN。 最好是使用支持从 DTD 文件设计 XML 文件的 XML 编辑器(例如 Eclipse)。使用以下 DTD 文件。

gschema.dtd

可以将从 GVariant 派生的任何内容存储到 GSettings 中。请参阅下一页以了解基本类型和要在架构中使用的“类型”属性。

GVariant Format Strings

编译模式

模式准备就绪后,(sudo) 将其复制到 /usr/share/glib-2.0/schemas/ 然后 运行,

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

此时可以使用dconf编辑器查看/修改新添加的设置。

从应用程序访问 GSettings

来到节目的重头戏,这就是应用程序读取(和/或写入)设置的方式。一个对象的 属性 不一定需要绑定到 GSettings 中的“键”,它也可以被查询和使用。有关详细信息,请参阅 GSettings API 参考。

Glib::RefPtr <Gio::Settings> refSettings = Gio::Settings::create(“org.gtk.skanray.emlibrary”);
CLineTrace * pTrace = NULL; // CLineTrace is derived from Gtk::Widget
…
pTrace = …
…
if(refSettings)
{
  refSettings->bind("wave-pressure-ptrach-visible",
                    pTrace,
                    "visible",
                    Gio::SETTINGS_BIND_DEFAULT);
}

现在您可以启动 dconf 编辑器 并测试设置。

注意

通常首选在 class 构造函数中进行绑定。然而,绑定到小部件的“可见”属性 可能有点棘手。通常,顶层 window 在其构造函数的最后一行执行 show_all() 。然而,顶级 window 子级的构造函数将完成执行,包括进行绑定。如果存在将“可见性”存储为 false 的设置,那么顶层 window 对 show_all() 的调用会弄乱该设置。在这种情况下,建议在相应 class.

的 on_map() 处理程序中执行一次绑定