Я изучаю основы GTK для школьного проекта, и я пытаюсь создать базовую программу, которая печатает значение текстовой записи по мере ее изменения. В то время как я получаю выход какой-то, это критическая ошибка, которая говорит:Критическая ошибка при попытке получить текстовое значение GTKEntry
Gtk-CRITICAL **: gtk_entry_get_text: assertion 'GTK_IS_ENTRY (entry)' failed
The text is : (null)
Мой код выглядит следующим образом:
#include<gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "salesbase.h"
#include <sqlite3.h>
#include <unistd.h>
static void change_text(GtkWidget *widget, GtkEntry *data){
const char* output = gtk_entry_get_text(data);
printf("The text is : %s\n", output);
}
int main(int argc, char *argv[]){
GtkBuilder *builder;
gtk_init(&argc, &argv);
GObject *window;
GtkEntry *input;
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "ui/main.ui", NULL);
window = gtk_builder_get_object(builder, "mainwindow");
g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
input = GTK_ENTRY(gtk_builder_get_object(builder, "test_entry"));
g_signal_connect(input, "changed", G_CALLBACK(change_text), &input);
gtk_main();
return 0;
}
Не передавать '& input' в' g_signal_connect() '; 'input' уже является указателем, и поэтому' & input' на самом деле является указателем на локальную переменную, которую вы не хотите использовать в качестве самого объекта. Вместо этого передайте только 'input'. – andlabs