Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[GTK+] g_signal_connect sam dopasowuje argumenty dla wykonywanej funkcji ?

Ostatnio zmodyfikowano 2012-07-13 15:28
Autor Wiadomość
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 » Kurs GTK+, C++Podstawowe kontrolki lekcjag_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.
P-59894
DejaVu
» 2012-07-12 23:36:03
Wejdź w źródła i zobacz jak to jest rozwiązane :)
P-59905
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:
C/C++
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.
P-59910
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 :)
P-59928
« 1 »
  Strona 1 z 1