我正在测试一些 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");
}
Run Code Online (Sandbox Code Playgroud)
我可以理解这里发生了什么,但不明白它是如何读取源 XML 的? window.ui, 在这种情况下。因为存储库没有他们提到的文件夹(/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");
}
Run Code Online (Sandbox Code Playgroud)
*.c我的所有 XML 内容都与和文件位于同一文件夹中*.h。这是一个测试决定,没有其他意义。
函数名称的部分_from_resource()表明该路径/org/gtk/exampleapp/window.ui不是文件系统路径,而是资源路径。资源路径与 GLib 的一项称为GResource的功能相关联,该功能允许您将二进制数据嵌入到程序或共享库中。
您将编写一个 XML 文件来描述哪些本地文件映射到哪些资源路径,然后作为构建过程的一部分,您将使用该工具将其转换为 C 源文件glib-compile-resources。然后将该 C 源文件构建到您的程序中。完整的详细信息位于我在第一段中链接的页面上。
(请注意,这些与 Windows 可执行文件中的嵌入式资源不同,后者使用完全不同的技术,但工作方式相似。)
如果您想从文件加载某些内容,GLib 和 GTK+ 以及基于它们构建的其他库提供了_from_file()、_from_data()或函数_from_stream()的替代项_from_resource()。_from_file()直接从文件中读取数据。_from_data()从内存中读取。_from_stream()从 GStream 读取,GStream 是 GLib 在其 GIO 模块中定义的面向对象的 I/O 端点。函数名后缀是可选的;它有所不同。
在 的情况下gtk_widget_class_set_template_from_resource(),提供的等效项是gtk_widget_class_set_template(),它遵循_from_data()从内存中读取的模式。内存存储在GBytes对象中,因此您必须从本地文件读取到 GBytes 中。
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |