0

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

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

4

1 回答 1

0

最后我想通了。想我会在这里分享我的发现。实际上有人已经为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 派生的任何内容存储到 GSettings 中。请参阅以下页面以了解要在模式中使用的基本类型和“类型”属性。

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() 处理程序中执行一次绑定。

于 2021-02-01T04:13:22.973 回答