Я пытаюсь создать диапораму в c с помощью gtk. У меня есть кнопка «предыдущая», которая показывает предыдущее изображение. Поэтому я подключаю свою кнопку к функции и передаю ее структуре. Но когда я пытаюсь напечатать элемент моего массива, у меня появляются странные символы, и я не знаю почему. Кроме того, я получил это предупреждение для моего образа gtk:
GLib-GObject-WARNING **: 19:12:16.442: invalid uninstantiatable type '(null)' in cast to 'GtkImage'
Gtk-CRITICAL **: 19:12:16.442: IA__gtk_image_set_from_file: assertion 'GTK_IS_IMAGE (image)' failed
Вот моя структура:
struct ButtonsArg {
GtkWidget *image;
char *img[];
};
Вот мой код для инициализации моей структуры в основном:
GtkWidget *image = gtk_image_new();
char *images[nbImages];
//I get the name of all my image in this function
getImageList(images);
//This print work fine
printf("%s\n", images[0]);
struct ButtonsArg * arg;
arg = malloc(sizeof(struct ButtonsArg) + nbImages*sizeof(char*));
for(int i = 0; i < nbImages; i++) {
arg->img[i] = malloc(strlen(images[i])+1);
strcpy(arg->img[i], images[i]);
}
arg->image = image;
g_signal_connect(precedent, "clicked", G_CALLBACK(event_precedent), &arg);
Вот функция, где возникают проблемы:
static void event_previous(GtkWidget *widget, gpointer data) {
g_print ("previous\n");
struct ButtonsArg *arg = data;
//Print weird charac
for(int i = 0; i < nbImages; i++) {
printf("%s\n", arg->img[i]);
}
GtkWidget *image = arg->image;
if(currentImage == 0) {
currentImage = nbImages - 1;
gtk_image_set_from_file (GTK_IMAGE (arg->image), arg->img[1]);
} else {
currentImage--;
gtk_image_set_from_file (GTK_IMAGE (arg->image), arg->img[2]);
}
}
Если у вас есть какой-либо совет, помощь или ссылка, которая может помочь, спасибо, что поделились ею со мной.