如何在Gtk4中加载Gio资源?

问题描述 投票:0回答:1

我正在尝试从资源文件加载主题

样式.css

以下是我需要应用的基本样式

window {
    background-color: orchid;
}

main.c

然后我编写了一个基本的 gtk 应用程序并尝试加载一个简单的 CSS 样式

#include <gtk/gtk.h>

extern GResource *gresources_get_resource(void);

static void activate(GtkApplication* application, gpointer data) {
  GtkWidget* window = gtk_application_window_new(application);
  GtkCssProvider* provider = gtk_css_provider_new();
  GdkDisplay* display = gdk_display_get_default();
  gchar* path = "/com/example/app/css/style.css";
  gtk_css_provider_load_from_resource(provider, path);
  gtk_style_context_add_provider_for_display(display, (GtkStyleProvider*)provider, 600);
  gtk_widget_set_size_request(window, 854, 480);
  gtk_window_present((GtkWindow*)window);
}

int main(int argc, char* argv[]) {
  GtkApplication* application = gtk_application_new("com.example.app", 0);
  g_resources_register(gresources_get_resource());
  g_signal_connect(application, "activate", (GCallback)activate, NULL);
  g_application_run((GApplication*)application, argc, argv);
  g_object_unref(application);
  return 0;
}

gresources.xml

以下是一个简单的资源文件

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/com/example/app/css">
    <file>css/style.css</file>
  </gresource>
</gresources>

我生成

gresource.c
并编译如下

glib-compile-resources --generate-source gresources.xml
gcc $(pkg-config --cflags gtk4) main.c gresources.c -o main $(pkg-config --libs gtk4)

程序输出

(主要:44395):Gtk-警告 **:13:58:23.068:主题解析器错误::1:1:“/com/example/app/css/style.css”中的资源不存在
glib gtk4 gtkcssprovider
1个回答
0
投票

看来我的gresource.xml是错误的

错了

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/com/example/app/css">
    <file>css/style.css</file>
  </gresource>
</gresources>

正确

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/com/example/app">
    <file>css/style.css</file>
  </gresource>
</gresources>

根据文档,我不应该将子路径放在

<file>subpath/file.ext</file>
标签中,而不是
<resource prefix="../subpath"></gresource>

© www.soinside.com 2019 - 2024. All rights reserved.