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

[gtkmm] Problem z podłączeniem funkcji do sygnału

Ostatnio zmodyfikowano 2011-12-02 10:33
Autor Wiadomość
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:

C/C++
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ę:

C/C++
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:

C/C++
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.
P-44932
pekfos
» 2011-11-29 14:07:57
class Matrix * zwrocMacierz();
?
P-44935
matek2305
Temat założony przez niniejszego użytkownika
» 2011-11-29 14:18:20
C/C++
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();
}
P-44936
matek2305
Temat założony przez niniejszego użytkownika
» 2011-12-01 15:58:43
Hmm nikt nie ma pomysłu jak temu zaradzić?
P-45030
pekfos
» 2011-12-01 16:01:25
chodziło mi bardziej o to czemu piszesz class przed typem. Tak się robiło w C.
P-45032
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.
P-45053
« 1 »
  Strona 1 z 1