[gtkmm] Problem z podłączeniem funkcji do sygnału
Ostatnio zmodyfikowano 2011-12-02 10:33
matek2305 Temat założony przez niniejszego użytkownika |
[gtkmm] Problem z podłączeniem funkcji do sygnału » 2011-11-29 09:11:33 Witam! Mam problem z podłączeniem funkcji do sygnału "clicked" przycisku. Otóż mam sobie pewną klasę OknoMacierzy która posiada metodę class Matrix * zwrocMacierz(); Klasa Matrix posiada metodę: void wypisz(); która po prostu wypisuje zawartość przechowywanej w niej tablicy do konsoli. No i teraz chciałbym sobie całą tą akcję podłączyć do przycisku z gtkmm, zrobiłem to tak: interfejs->pWyznacznik.signal_clicked().connect( sigc::mem_fun( * macierz->zwrocMacierz(), & Matrix::wypisz ) ); Wszystko ładnie się kompiluje ale niestety po naciśnięciu przycisku wypisywane są same zera (tak jakby macierz byłą pusta). Zrobiłęm więc chwilowo dodatkową funkcję: void MatrixGtk::wypiszMacierz() { macierz->zwrocMacierz()->wypisz(); } w której, jak widać po prostu "ręcznie" to wszystko wywołałem oraz podłączyłem ją do sygnału: interfejs->pWyznacznik.signal_clicked().connect( sigc::mem_fun( * this, & MatrixGtk::wypiszMacierz ) ); Skompilowałem i uruchomiłem program, okazało się że teraz wszystko działa jak należy. Czy mógłby mi ktoś wytłumaczyć dlaczego poprzedni sposób nie chciał działać? I jeśli to możliwe, jak sprawić by zadziałał? Można przyjąć, że już jest ok ale nie chciałbym niepotrzebnie pisać dodatkowych funkcji które nic poza wywoływaniem innej funkcji nie robią. Jeśli trzeba to wstawię więcej kodu, tylko napiszcie;p Z góry dzięki i pozdrawiam. |
|
pekfos |
» 2011-11-29 14:07:57 class Matrix * zwrocMacierz(); ? |
|
matek2305 Temat założony przez niniejszego użytkownika |
» 2011-11-29 14:18:20 class Matrix * OknoMacierzy::zwrocMacierz() { Glib::ustring buf; Matrix * tab = new Matrix( n ); for( int i = 0; i < n; i++ ) { for( int j = 0; j < n; j++ ) { if( pole[( i * n ) + j ].get_text_length() == 0 ) { tab->t[ i ][ j ] = 0; } else { buf = pole[( i * n ) + j ].get_text(); tab->t[ i ][ j ] = atof( buf.c_str() ); } } } return tab->transponuj(); } |
|
matek2305 Temat założony przez niniejszego użytkownika |
» 2011-12-01 15:58:43 Hmm nikt nie ma pomysłu jak temu zaradzić? |
|
pekfos |
» 2011-12-01 16:01:25 chodziło mi bardziej o to czemu piszesz class przed typem. Tak się robiło w C. |
|
matek2305 Temat założony przez niniejszego użytkownika |
» 2011-12-02 10:33:54 Heh w sumie nawet nie wiem czemu tak napisałem;p No ale to nie ma wpływu na mój problem niestety więc nadal proszę o pomoc. |
|
« 1 » |