Я хотел бы обновить текстовую запись при нажатии клавиши.
В моем сценарии нет клавиатуры, поэтому я генерирую ее программно и пытаюсь обновить текстовую запись из обработчика событий нажатия клавиш.
При каждом нажатии клавиши мне нужно обновить текстовую запись в окне GTK. Как я могу этого добиться? Я пытался
gtk_entry_set_text (GTK_ENTRY (entry1), buffer);
но это дает ошибку сегментации.
Я буду получать данные из некоторых других пользовательских потоков, мне нужно обновить текстовую запись новыми данными и показать окно gtk с обновленной текстовой записью.
Ниже приведен мой полный код:
GtkEntry *entry1;
static gboolean kp_event_S1_1(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
printf(" - kp_event_S1_1 - \n");
gtk_entry_set_text (GTK_ENTRY (entry1), buffer);
}
void S1_1(void )
{
GtkWidget *Win_1;
GtkBuilder *builder;
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "/home/glade/glade1.glade", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "Win_1"));
g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit),NULL );
g_signal_connect(G_OBJECT (window), "key_press_event", G_CALLBACK (kp_event_S1_1), NULL);
gtk_widget_show_all(window);
gtk_main();
}
gtk_entry_set_text
— правильный API. Получение ошибки сегментации означает, чтоentry1
не является экземпляромGtkEntry *
илиbuffer
не является строкой, заканчивающейся NUL: это так просто. - person ntd   schedule 29.05.2015buffer
? Как это декларируется? Ты все равно не показываешь. А обновление из другой ветки звучит очень страшно. Попробуйте использовать константу (строковый литерал) вместоbuffer
в вызове, посмотрите, работает ли это. - person unwind   schedule 29.05.2015//create window
? - person andlabs   schedule 29.05.2015entry1
из своего файла билдера! - person andlabs   schedule 30.05.2015