[GTK+] g_signal_connect sam dopasowuje argumenty dla wykonywanej funkcji ?
Ostatnio zmodyfikowano 2012-07-13 15:28
McAffey Temat założony przez niniejszego użytkownika |
[GTK+] g_signal_connect sam dopasowuje argumenty dla wykonywanej funkcji ? » 2012-07-12 15:26:25 Witam. Ostatnio zacząłem się uczyć GTK+ i intryguje mnie jedna rzecz. W kursie jest napisane, że ostatnim argumentem dla g_signal_connect są argumenty dla wykonywanej funkcji. Jednak w lekcji Podstawowe kontrolkig_signal_connect jest używany bez podawania żadnej wartości w ostatnim argumencie g_signal_connect( toggleButton, "clicked", G_CALLBACK( zmien_etykiete ), NULL ); a mimo to zmien_etykiete przyjmuje jako argument : toggleButton. Jak to jest, gdy na końcu g_signal_connect jest NULL a wykonywana funkcja potrzebuje argumentów to automatycznie dopisuje się jej jako argument instancje do której ma zostać podłączone nowe zdarzenie (jeśli typy pasują) ? Bo nie jestem pewien jak to się tutaj odbywa, z góry dzięki za rozwianie wątpliwości. |
|
DejaVu |
» 2012-07-12 23:36:03 Wejdź w źródła i zobacz jak to jest rozwiązane :) |
|
Badman |
» 2012-07-13 08:11:52 Nie zagłębiając się w szczególy jak dokładnie jest napisane, g_signal_connect( toggleButton, "clicked", G_CALLBACK( zmien_etykiete ), NULL ); oznacza, że kiedy zostanie wywołane zdarzenie kliknięcia na przycisku wskazywanym przez toggleButton, to zostanie wywołana funkcja zmien_etykiete, której zostanie przekazany parametr NULL. Oczywiście zamiast NULL można przekazać dowolną daną.
Faktycznie podana w przykładzie funkcja zmien_etykiete obsługująca zdarzenie "clicked" może budzić wątpliwości, ponieważ zapomnianą o tzw. "danych użytkownika", czyli w tym przypadku przekazywanym NULL.
Prawidłowo powinna wyglądać tak:
void zmien_etykiete( GtkButton * widget, gpointer dane_uzytkonika ) { [...] }
Tak automatycznie "dopisuje" istancje, jednak co jeszcze dopisuje zależy jaką kontrolkę i sygnał obsługuje. Jednak tzw. "dane użytkownika" są ostatnim parametrem. Polecam http://developer.gnome.org/gtk/2.24, tam znajdziesz np. http://developer.gnome.org/gtk/2.24/GtkToggleButton.html. |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2012-07-13 15:28:19 Nietypowo rozwiązane, no ale ok, dzięki za odpowiedzi :) |
|
« 1 » |