GSettings, glib-compile-schemas and Eclipse



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

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

终于我想到了。以为我会在这里分享我的发现。实际上,有人已经为python解释了这一点(下面的链接(。

将GSettings与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 派生的任何内容存储到 GSetting 中。请参阅以下页面以了解要在架构中使用的基本类型和"type"属性。

GVariant 格式字符串

编译架构

模式准备就绪后,(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 编辑器并测试设置。

注意

绑定通常首选在类构造函数中进行。但是,绑定到小部件的"可见"属性可能有点棘手。通常,顶级窗口执行 show_all(( 作为其构造函数的最后一行。但是,顶级窗口子窗口的构造函数将完成执行,包括进行绑定。如果有些设置将"可见性"存储为 false,那么顶级窗口对 show_all(( 的调用会弄乱该设置。在这种情况下,建议在相应类的 on_map(( 处理程序中执行一次绑定。

相关内容

  • 没有找到相关文章

最新更新