Гном-строитель не находит мой файл поляны
Я пытаюсь писать программы с графическим интерфейсом с помощью gnome-builder и пытаюсь сделать макет с помощью Glade. Я сделал учебник по заметкам программиста.
С
#include <gtk/gtk.h>
int main(int argc, char *argv[]){
GError *err = NULL;
GtkBuilder *builder;
GtkWidget *window;
gtk_init(&argc, &argv);
builder = gtk_builder_new();
gtk_builder_add_from_file (builder, "window_main.ui", &err);
if (err != NULL) {
fprintf (stderr, "Unable to read file: %s\n", err->message);
g_error_free(err);
return 1;
}
window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
if (window == NULL || !GTK_IS_WINDOW(window)) {
fprintf (stderr, "Unable to get window. (window == NULL || window != GtkWindow)\n");
return 1;
}
gtk_builder_connect_signals(builder, NULL);
g_object_unref(builder);
gtk_widget_show(window);
gtk_main();
return 0;
}
void on_window_main_destroy(GtkWidget *widget, gpointer user_data){
gtk_main_quit();
}
просека
<?xml version=1.0 encoding="UFT-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkWindow" id="window_main">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Test Window</property>
<property name="default_width">640</property>
<property name="default_height">480</property>
<signal name="destroy" handler="on_window_main_destroy" swapped="no"/>
<child>
<placeholder/>
</child>
</object>
</interface>
Файл.glade расположен в направлении src/, как файл.c. Когда я запускаю код, возвращается следующее сообщение об ошибкеUnable to read file: Failed to open file “./window_main.ui”: No such file or directory
Я не знаю, где я должен положить файл Glade, потому что, когда я собрал себя сgcc main.c -Wall 'pkg-config --cflags --libs gtk+-3.0' -export-dynamic
и запустить его с ./a.out
окно открывается без каких-либо ошибок.
1 ответ
Как упомянуто TingPing в области комментариев, лучший способ - включить его в GResource. В вашем случае спецификация ресурса XML будет выглядеть так:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/main">
<file>window_main.ui</file>
</gresource>
</gresources>
И вы загружаете ресурс с gtk_builder_new_from_resource()
, лайк
GtkBuilder *builder = gtk_builder_new_from_resource("/main/window_main.ui");