c - 带有 XML 接口(interface)的基本 UI Gtk

标签 c xml gtk

我正在测试一些 GTK+ 示例。

在某些给定函数中,对某个 XML 文件路径的引用出现在 C代码。它解释了 C 中的代码正在读取 XML 内容以 稍后将其编译为可从 C 代码使用:

static void
example_app_window_class_init (ExampleAppWindowClass *class)
{
  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
                                               "/org/gtk/exampleapp/window.ui");
}

我能理解这里发生了什么,但不理解它是如何读取源 XML 的? window.ui,在这种情况下。因为 repo 没有文件夹 正如他们提到的那样 (/org/gtk/exampleapp/)。

所以,在我的函数中,我希望做类似的事情:

static void my_style_window_class_init(MyStyleWindowClass *class) {
  gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS(class),
                                              "window.ui");
}

我所有的 XML 内容都在与 *.c*.h 文件相同的文件夹中。这是一个测试的决定,没有其他意义。

最佳答案

_from_resource()部分函数名表示路径/org/gtk/exampleapp/window.ui不是文件系统路径,而是资源路径。资源路径与称为 GResource 的 GLib 功能相关联它允许您将二进制数据嵌入到程序或共享库中。

您可以编写一个 XML 文件来描述哪些本地文件映射到哪些资源路径,然后作为构建过程的一部分,您可以将其转换为带有 glib-compile-resources 的 C 源文件。工具。然后将该 C 源文件构建到您的程序中。完整的详细信息在我在第一段中链接的页面上。

(请注意,这些与 Windows 可执行文件中的嵌入式资源不同,后者使用完全不同的技术,但工作方式相似。)

如果你想从一个文件中加载一些东西,GLib 和 GTK+ 以及其他建立在它们之上的库提供了一个 _from_file() , _from_data() , 或 _from_stream() _from_resource() 的替代品功能。 _from_file()直接从文件中读取数据。 _from_data()从内存中读取。 _from_stream()从 GStream 读取,它是 GLib 在其 GIO 模块中定义的面向对象的 I/O 端点。函数名后缀是可选的;它会有所不同。

gtk_widget_class_set_template_from_resource()的情况下, 提供的等价物是 gtk_widget_class_set_template() , 它遵循 _from_data()从内存中读取的模式。内存存储在 GBytes 中对象,因此您必须从本地文件读取到 GBytes。

关于c - 带有 XML 接口(interface)的基本 UI Gtk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41219172/

相关文章:

python - 如何更改 PyGTK 应用程序中 MenuItem 的标签?

c - 为什么二维数组可以从 int ** 转换为 int * ,而指针数组却不能

python - 将算法从 Python 转换为 C : Suggestions for Using bin() in C?

c - 返回链表上的多个节点

gtk - pygtk 中 connect() 和 connect_after() 的区别

python - 如何在 Gtk+ 3 中向 GtkBox 添加 css 样式

c - strtoul() 函数中的第二个参数有什么作用?

python - 在 Python 中解析大型 XML 文件时出现内存错误

xml - cvc-elt.1 : Cannot find the declaration of element 'data'

android - margin 或填充不工作使用 <merge 标签 android