Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Mam problem z przekazaniem do funkcji wskaźnika label.. Nie rozumiem co jest nie tak, proszę o pomoc..
void write_character_to_label(GtkWidget *label) { gtk_label_set_markup (label, "test"); } [...] label = gtk_label_new ("aaa"); button = gtk_button_new_with_label ("Przycisk"); g_signal_connect( G_OBJECT (button), "clicked", G_CALLBACK(write_character_to_label), label);
co tu jest nie tak? :(
Ostatnio edytowany przez blazeroot (2010-02-18 22:59:33)
Offline
podaj jakie sa obojawy (komunikaty kompilatora / dzialanie)
Offline
1. sprawdz w write_character_to_label przed gtk_label_set_markup co tak na prawde dostaje ta funkcja - conajmniej porownaj wartosc HEX otrzymanego wskaznika z wskaznikiem utworzonym przez gtk_label_new
2. sprawdz po "label = gtk_label_new ("aaa");" wartosc zwracana przez GTK_IS_LABEL (label)
Offline
Ad1. Są inne wartości, czyli nie to samo miejsce w pamięci, czyli rzeczywiście funkcja nie otrzymuje tego co ma otrzymać.
Ad2. TRUE
Ciężka sprawa, jak dla mnie przynajmniej, nie widzę gdzie tu może być powód tego :-/
Offline
tu juz trzeba widziec wiekszy fragment kodu - jaki jest zasieg zmiennej label, czy cos innego modyfikuje jej wartosc?
(slabo znam gtk ale) przypuszczam ze do write_character_to_label przekazywana jest wartosc label z momentu nacisniecia przycisku ...
Offline
void write_character_to_label(GtkWidget *label) { gtk_label_set_markup (label, "test"); } int main (int argc, char *argv[]) { [...] GtkWidget *label; [...] /* INICJACJA GTK */ g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL); gtk_init (&argc, &argv); g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL); /* TWORZYMY GŁÓWNE OKNO */ win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (win), 8); gtk_window_set_title (GTK_WINDOW (win), "Klawiatura"); gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER); gtk_widget_realize (win); g_signal_connect (win, "destroy", gtk_main_quit, NULL); label = gtk_label_new ("aaa"); if (GTK_IS_LABEL (label)) { printf("TAK\n"); } else { printf("NIE\n"); } [...] /* TWORZYMY TABLICE PRZYCISKOW */ char first_row[] = "1234567890"; char second_row[] = "qwertyuiop"; char third_row[] = "asdfghjkl"; char fourth_row[] = "zxcvbnm?"; char *label_text; int i; short col = 1; /* TWORZYMY TABELE GTK */ table = gtk_table_new (10, 5, TRUE); gtk_container_add (GTK_CONTAINER (win), table); for (i = 0; i < 10; i++) { label_text = first_row[i]; button = gtk_button_new_with_label (&label_text); gtk_table_attach_defaults (GTK_TABLE (table), button, i, i+1, col, col+1); g_signal_connect( G_OBJECT (button), "clicked", G_CALLBACK(write_character_to_label), label); } [...]
Domyślnie jeszcze konkretna litera będzie przesyłana do funkcji, ale teraz jakoś przestało mi coś działać bo jakiś błąd robię, tak więc podaję kod jeszcze bez próbnego przekazania litery.
PS. jestem świadom że ten kod może być gorszy niż tragiczny..
Offline
rozumiem ze nic innego nie modyfikuje tego wskaznika ... moze dla testu zrob go zmienna globalna
Offline
Działa! Super! W zasadzie to chyba nie powinno na tej zasadzie działać, ale ważne że działa, bardzo mi na czasie zależy. Dzięki Ci bardzo! Jak wymyślę dlaczego nie działało tak jak trzeba to na pewno napiszę tutaj ;-)
Offline