我正在尝试从资源文件加载主题
以下是我需要应用的基本样式
window {
background-color: orchid;
}
然后我编写了一个基本的 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;
}
以下是一个简单的资源文件
<?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”中的资源不存在
看来我的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>