czosnek17 Temat założony przez niniejszego użytkownika |
Gtk+, a programowanie obiektowe. » 2012-08-19 17:18:17 W gtk łatwiej i lepiej pisać programy obiektowo, czy normalnie? Piszę normalnie i co chwilę są jakieś problemy. Np teraz kończyłem pisać gui do gry, ale po ponownym wyświetleniu menu przyciski nie reagują... To jest męczące.
|
|
RazzorFlame |
» 2012-08-19 17:33:07 Obiekty prawie zawsze skracają ilość linii kodu i łatwiej jest pisać |
|
m4tx |
» 2012-08-19 17:47:46 Np teraz kończyłem pisać gui do gry, ale po ponownym wyświetleniu menu przyciski nie reagują... |
Źle sygnały podłączasz or something :P @RazzorFlame, zwróć uwagę, że on pyta o GTK+. Szczerze powiedziawszy, w GTK+ jakoś nigdy mi obiektowe pisanie nie było potrzebne :P Aczkolwiek jeśli planujesz pisać własne widżety to już raczej nie ma wyjścia... |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-19 18:07:14 Aczkolwiek jeśli planujesz pisać własne widżety to już raczej nie ma wyjścia... |
Nie, nigdy o tym nie słyszałem :P Funkcje obsługę wszystkich zdarzeń mam na końcu programu i działa tylko po włączeniu programu. Jak wrócę do menu z gry, to nic się nie dzieje po kliknięciu na przyciski. Muszę obsługiwać zdarzenia po ostatniej funkcji w programie, a to ostatecznie doprowadzi do bałaganu w kodzie. |
|
Badman |
» 2012-08-20 00:00:22 Uważam, że masz coś namieszane w kodzie.
Jeżeli całkowicie chcesz pisać obiektowo to przeżuć się na gtkmm. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-20 19:03:25 Mój problem raczej nie wynika z namieszania w kodzie, tylko chyba nie do końca rozumiem budowę programu w gtk... Dlaczego po funkcji wruc program nie rysuje menu? Przecież po wywołaniu tej funkcji jest instrukcja, która powinna to zrobić!? Wstawiam ogólną budowę programu. Jakby co, mogę dać normalny kod. Poza tym wszystko działa. #include <gtk/gtk.h>
struct struktura { };
void rysujmenu( GtkWidget * przycisk, gpointer dane ) { struct struktura * sss; sss =( struct struktura * ) dane; sss->svbox = gtk_vbox_new( FALSE, 1 ); gtk_container_add( GTK_CONTAINER( sss->sokno ), sss->svbox ); gtk_widget_show_all( sss->svbox ); }
void wruc( GtkWidget * widget, gpointer dane ) { sss->kont = 12; gtk_widget_destroy( sss->fixed2 ); }
void wybierzpoziom( GtkWidget * przycisk, gpointer dane ) { gtk_widget_destroy( sss->svbox ); sss->czystart = 1; sss->hbox = gtk_fixed_new(); gtk_container_add( GTK_CONTAINER( sss->sokno ), sss->hbox ); gtk_widget_show_all( sss->hbox ); }
void gra( GtkWidget * widget, gpointer dane ) { gtk_widget_destroy( sss->hbox ); sss->fixed2 = gtk_fixed_new(); gtk_container_add( GTK_CONTAINER( sss->sokno ), sss->fixed2 ); gtk_widget_show_all( sss->fixed2 ); }
int main( int argc, char * argv[] ) { struct struktura sss; sss.czystart = 0; if( sss.czystart == 0 ) { rysujmenu( NULL, & sss ); } g_signal_connect( G_OBJECT( sss.latwy ), "clicked", G_CALLBACK( gra ), & sss ); g_signal_connect( G_OBJECT( sss.start ), "clicked", G_CALLBACK( wybierzpoziom ), & sss ); g_signal_connect( G_OBJECT( sss.powrot ), "clicked", G_CALLBACK( wruc ), & sss ); if( sss.kont == 12 ) { rysujmenu( NULL, & sss ); } g_signal_connect( G_OBJECT( wyjdz ), "clicked", G_CALLBACK( gtk_main_quit ), NULL ); g_signal_connect( G_OBJECT( sss.sokno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); gtk_widget_show_all( sss.sokno ); gtk_main(); return 0; }
|
|
m4tx |
» 2012-08-20 19:42:25 Przecież po wywołaniu tej funkcji jest instrukcja, która powinna to zrobić!? |
Nie. Instrukcję tę masz pod podpinaniem sygnałów, czyli generalnie to nigdy zadziała (nigdy kont nie będzie miało wartości 12, zanim nie wyświetlisz GUI) - program zaczyna wyświetlać GUI i reagować dopiero od momentu wywołania gtk_main(). Pamiętaj też, że nawet, jak przesuniesz tego ifa pod gtk_main(), to to i tak nie zadziała - musisz wyświetlanie menu dać w funkcji wruc(). Radzę przećwiczyć działanie sygnałów :) I btw., - "wr uc"? |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-20 19:52:11 Tak. Przecież przy polskich znaków kompilator wyświetla błędy :P Dzięki za wytłumaczenie, myślałem, że ta pętla działa bardziej tak jak np w sfmlu. No, menu się łaskawie wyświetliło, ale czemu przyciski przestały reagować? Dlaczego? To mnie doprowadzi do depresji... Ledwo jeden dziwny problem rozwiązany, to zaraz pojawia się następny, jeszcze dziwniejszy... Czego ja tu jeszcze nie rozumiem... |
|
« 1 » 2 |