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

[GTK+] Jak w końcu idzie ten program...

Ostatnio zmodyfikowano 2012-09-26 21:14
Autor Wiadomość
czosnek17
Temat założony przez niniejszego użytkownika
» 2012-09-21 18:47:07
Działa.
CZŁOWIEKU, DZIĘKI!

Jprdl... otwieram...

W czasie problemu przestałem ogarniać kod mojego programu (nic tam nie pisałem) i przez pomyłkę pomyślałem, że po poprawieniu błędów, o których napisałeś już działa tak, jak powinien ._.  Zauważyłem,że tak nie jest jak chciałem dalej pisać. To co napisałeś z tymi tablicami już poprawiłem (jak widać w kodzie "z buta"), ale program nie wyświetla false/true(nawet nie zauważyłem zmian w działaniu), a tak miało być. Ale ja jestem mądry..

Kod:
C/C++
#include <gtk/gtk.h>
using namespace std;
struct struktura
{
    GtkWidget * sokno;
    GtkWidget * svbox;
   
    GtkWidget * start;
    GtkWidget * zasady;
    GtkWidget * statystyki;
    GtkWidget * ogrze;
    GtkWidget * wwyjdz;
   
    // wybierzpoziom
    GtkWidget * hbox;
    GtkWidget * trudny;
    GtkWidget * latwy;
   
    GtkWidget * fixed2;
    GtkWidget * poletxt;
   
    GtkWidget * etgr;
    GtkWidget * wprowadz;
    GtkWidget * etwyb;
    GtkWidget * sep;
    GtkWidget * ramka;
    GtkWidget * wyniklab;
    GtkWidget * powrot;
    GtkWidget * wynik;
   
    GtkWidget * etykieta;
    GtkWidget * kontenerx;
    GtkWidget * fixlab;
    GtkWidget * graj;
   
    int kont;
   
    int czystart;
    const gchar * wczyt;
    //const gchar * tab[10];
    int liczbazm;
    bool sprawdzdane;
   
};
void rysujmenu( GtkWidget * przycisk, gpointer dane )
{
    struct struktura * sss;
    sss =( struct struktura * ) dane;
    gtk_widget_set_size_request( sss->svbox, 245, 245 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->start, TRUE, TRUE, 2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->zasady, TRUE, TRUE, 2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->statystyki, TRUE, TRUE, 2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->ogrze, TRUE, TRUE, 2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->wwyjdz, TRUE, TRUE, 2 );
    gtk_widget_show_all( sss->svbox );
}
void pokazmenu( GtkWidget * przycisk, gpointer dane )
{
    struct struktura * sss;
    sss =( struct struktura * ) dane;
    gtk_widget_hide( sss->fixed2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->start, TRUE, TRUE, 2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->zasady, TRUE, TRUE, 2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->statystyki, TRUE, TRUE, 2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->ogrze, TRUE, TRUE, 2 );
    gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->wwyjdz, TRUE, TRUE, 2 );
    gtk_widget_show_all( sss->svbox );
}
void wybierzpoziom( GtkWidget * przycisk, gpointer dane )
{
    struct struktura * sss;
    sss =( struct struktura * ) dane;
   
    gtk_widget_hide( sss->svbox );
    sss->czystart = 1;
    gtk_fixed_put( GTK_FIXED( sss->hbox ), sss->etwyb, 10, 35 );
    gtk_fixed_put( GTK_FIXED( sss->hbox ), sss->trudny, 10, 100 );
    gtk_fixed_put( GTK_FIXED( sss->hbox ), sss->latwy, 150, 100 );
    gtk_widget_show_all( sss->hbox );
}
void rysujgra( GtkWidget * widget, gpointer dane )
{
    struct struktura * sss;
    sss =( struct struktura * ) dane;
    gtk_widget_hide( sss->hbox );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->wprowadz, 174, 10 );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->powrot, 2, 210 );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->etgr, 10, 10 );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->wynik, 213, 214 );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->wyniklab, 113, 214 );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->poletxt, 125, 10 );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->sep, 0, 30 );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->ramka, 0, 65 );
    gtk_fixed_put( GTK_FIXED( sss->fixed2 ), sss->wprowadz, 174, 10 );
    gtk_fixed_put( GTK_FIXED( sss->fixlab ), sss->etykieta, 10, 10 );
    gtk_fixed_put( GTK_FIXED( sss->fixlab ), sss->graj, 4, 2 );
    gtk_widget_show_all( sss->fixed2 );
   
   
}

void pobierz( GtkWidget * przycisk, gpointer dane )
{
    struct struktura * sss;
    sss =( struct struktura * ) dane;
    gtk_widget_hide( sss->graj );
    const gchar * zzz = "";
   
    const gchar * nic = "nic";
    const gchar * zle = "zle";
   
    sss->wczyt = gtk_entry_get_text( GTK_ENTRY( sss->poletxt ) );
   
    const gchar * tab1 = "1";
    const gchar * tab2 = "2";
    const gchar * tab3 = "3";
    const gchar * tab4 = "4";
    const gchar * tab5 = "5";
    const gchar * tab6 = "6";
    const gchar * tab7 = "7";
    const gchar * tab8 = "8";
    const gchar * tab9 = "9";
    const gchar * tab10 = "10";
   
    if( !g_strcmp0( sss->wczyt, tab1 ) ||
    !g_strcmp0( sss->wczyt, tab2 ) ||
    !g_strcmp0( sss->wczyt, tab3 ) ||
    !g_strcmp0( sss->wczyt, tab4 ) ||
    !g_strcmp0( sss->wczyt, tab5 ) ||
    !g_strcmp0( sss->wczyt, tab6 ) ||
    !g_strcmp0( sss->wczyt, tab7 ) ||
    !g_strcmp0( sss->wczyt, tab8 ) ||
    !g_strcmp0( sss->wczyt, tab9 ) ||
    !g_strcmp0( sss->wczyt, tab10 ) ||
    !g_strcmp0( sss->wczyt, zzz ) )
    {
       
       
        if( !g_strcmp0( sss->wczyt, tab1 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab1 );
            sss->liczbazm = 1;
        }
       
        if( !g_strcmp0( sss->wczyt, tab2 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab2 );
            sss->liczbazm = 2;
        }
       
        if( !g_strcmp0( sss->wczyt, tab3 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab3 );
            sss->liczbazm = 3;
        }
       
        if( !g_strcmp0( sss->wczyt, tab4 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab4 );
            sss->liczbazm = 4;
        }
       
        if( !g_strcmp0( sss->wczyt, tab5 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab5 );
            sss->liczbazm = 5;
        }
       
        if( !g_strcmp0( sss->wczyt, tab6 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab6 );
            sss->liczbazm = 6;
        }
       
        if( !g_strcmp0( sss->wczyt, tab7 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab7 );
            sss->liczbazm = 7;
        }
       
        if( !g_strcmp0( sss->wczyt, tab8 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab8 );
            sss->liczbazm = 8;
        }
       
        if( !g_strcmp0( sss->wczyt, tab9 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab9 );
            sss->liczbazm = 9;
        }
       
        if( !g_strcmp0( sss->wczyt, tab10 ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), tab10 );
            sss->liczbazm = 10;
        }
       
        sss->sprawdzdane = true;
       
    } //if
    else
    {
        gtk_label_set_text( GTK_LABEL( sss->etykieta ), zle );
        sss->sprawdzdane = false;
    }
   
    gtk_entry_set_text( GTK_ENTRY( sss->poletxt ), zzz );
   
    //sss->wczyt = gtk_entry_get_text(GTK_ENTRY(sss->poletxt));
   
}

void gtrudny( GtkWidget * przycisk, gpointer dane )
{
   
    struct struktura * sss;
    sss =( struct struktura * ) dane;
    const gchar * tr = "true";
    const gchar * fa = "false";
   
    gtk_widget_hide( sss->graj );
    g_signal_connect( G_OBJECT( sss->wprowadz ), "clicked", G_CALLBACK( pobierz ), sss ); // to w pętli, operacje na  sss->liczbazm
   
   
   
    //g_print ( "Wartość %d\n", sss->sprawdzdane );
   
    if( sss->sprawdzdane == true )
    {
        gtk_label_set_text( GTK_LABEL( sss->etykieta ), tr );
        g_print( "aaWartość %d\n", sss->sprawdzdane );
    }
    else
    {
        gtk_label_set_text( GTK_LABEL( sss->etykieta ), fa );
        g_print( "bbWartość %d\n", sss->sprawdzdane );
    }
   
   
}

int main( int argc, char * argv[] )
{
    struct struktura sss;
   
    GtkWidget * okno;
    GtkWidget * vbox;
   
    GtkWidget * pstart;
    GtkWidget * pzasady;
    GtkWidget * pstatystyki;
    GtkWidget * pogrze;
    GtkWidget * wyjdz;
   
    GtkWidget * pokaz; //
   
    GtkWidget * phboxwp;
    GtkWidget * ptrudny;
    GtkWidget * platwy;
    GtkWidget * kontener2;
    GtkWidget * kontener;
    GtkWidget * etwybx;
    GtkWidget * kontener3;
   
    GtkWidget * etgrx;
    GtkWidget * ramkax;
    GtkWidget * sepx;
    GtkWidget * wyniklabx;
    GtkWidget * entryx;
    GtkWidget * etx;
    GtkWidget * wynikx;
    GtkWidget * fix2;
    GtkWidget * wprowx;
    GtkWidget * fixlabx;
    GtkWidget * grajx;
   
   
    gtk_init( & argc, & argv );
    sss.sokno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_position( GTK_WINDOW( sss.sokno ), GTK_WIN_POS_CENTER );
    gtk_window_set_default_size( GTK_WINDOW( sss.sokno ), 250, 250 );
    gtk_window_set_title( GTK_WINDOW( sss.sokno ), "Gra 1.0" );
    gtk_container_set_border_width( GTK_CONTAINER( sss.sokno ), 5 );
    gtk_window_set_opacity( GTK_WINDOW( sss.sokno ), 1 );
   
    //    sss.tab = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
   
    ptrudny = gtk_button_new_with_label( "Trudny" );
    platwy = gtk_button_new_with_label( "Łatwy" );
    sss.trudny = ptrudny;
    sss.latwy = platwy;
   
    sss.powrot = gtk_button_new_with_label( "Powrót do menu" );
    sss.czystart = 0;
   
    pstart = gtk_button_new_with_label( "Start" );
    pzasady = gtk_button_new_with_label( "Zasady" );
    pstatystyki = gtk_button_new_with_label( "Statystyki" );
    pogrze = gtk_button_new_with_label( "O grze" );
    wyjdz = gtk_button_new_with_label( "Wyjdź" );
   
    sss.start = pstart;
    sss.zasady = pzasady;
    sss.statystyki = pstatystyki;
    sss.ogrze = pogrze;
    sss.wwyjdz = wyjdz;
   
    sss.sprawdzdane = false;
   
   
    kontener = gtk_fixed_new();
    gtk_container_add( GTK_CONTAINER( sss.sokno ), kontener );
    sss.kontenerx = kontener;
    gtk_widget_set_size_request( sss.kontenerx, 245, 245 );
   
    kontener2 = gtk_vbox_new( FALSE, 1 );
    gtk_container_add( GTK_CONTAINER( kontener ), kontener2 );
    sss.svbox = kontener2;
   
    fix2 = gtk_fixed_new();
    gtk_container_add( GTK_CONTAINER( sss.kontenerx ), fix2 );
    sss.fixed2 = fix2;
    char * txt = "<span fgcolor='#6666CC'><span font='14'>Wybierz poziom trudności:</span></span>";
    etwybx = gtk_label_new( txt );
    gtk_label_set_markup( GTK_LABEL( etwybx ), txt );
    sss.etwyb = etwybx;
   
    kontener3 = gtk_fixed_new();
    gtk_container_add( GTK_CONTAINER( sss.kontenerx ), kontener3 );
    sss.hbox = kontener3;
    gtk_widget_set_size_request( sss.trudny, 85, 35 );
    gtk_widget_set_size_request( sss.latwy, 85, 35 );
   
    //////
    char * txt22 = "<span fgcolor='#6666CC'><span font='14'>Podaj liczbę:</span></span>";
    char * txt2 = "<span fgcolor='#191970'><span font='11'>Aktualny wynik:</span></span>";
    char * txt4 = "teezstthhhh                                 ";
    char * txt3 = "<span fgcolor='#191970'><span font='11'>100</span></span>";
    etgrx = gtk_label_new( txt22 );
    gtk_label_set_markup( GTK_LABEL( etgrx ), txt22 );
    sss.etgr = etgrx;
   
    wynikx = gtk_label_new( txt3 );
    gtk_label_set_markup( GTK_LABEL( wynikx ), txt3 );
    sss.wynik = wynikx;
   
   
    wyniklabx = gtk_label_new( txt2 );
    gtk_label_set_markup( GTK_LABEL( wyniklabx ), txt2 );
    sss.wyniklab = wyniklabx;
   
    entryx = gtk_entry_new();
    gtk_widget_set_size_request( entryx, 40, 25 );
    sss.poletxt = entryx;
   
    sepx = gtk_hseparator_new();
    gtk_widget_set_size_request( sepx, 237, 42.5 );
    sss.sep = sepx;
   
    ramkax = gtk_frame_new( "Stan rywalizacji:" );
    gtk_frame_set_shadow_type( GTK_FRAME( ramkax ), GTK_SHADOW_ETCHED_OUT );
   
    gtk_widget_set_size_request( ramkax, 237, 135 );
    sss.ramka = ramkax;
   
    wprowx = gtk_button_new_with_label( "OK" );
    gtk_widget_set_size_request( wprowx, 55, 26.9 );
    sss.wprowadz = wprowx;
   
    fixlabx = gtk_fixed_new();
    gtk_container_add( GTK_CONTAINER( sss.ramka ), fixlabx );
    sss.fixlab = fixlabx;
   
    etx = gtk_label_new( txt4 );
    sss.etykieta = etx;
   
    grajx = gtk_button_new_with_label( "Kliknij, aby zacząć!" );
    gtk_widget_set_size_request( grajx, 226, 112 );
    sss.graj = grajx;
   
    if( sss.czystart == 0 )
    {
        rysujmenu( NULL, & sss );
    }
   
    g_signal_connect( G_OBJECT( sss.graj ), "clicked", G_CALLBACK( gtrudny ), & sss );
    g_signal_connect( G_OBJECT( sss.powrot ), "clicked", G_CALLBACK( pokazmenu ), & sss );
    g_signal_connect( G_OBJECT( sss.trudny ), "clicked", G_CALLBACK( rysujgra ), & sss );
    g_signal_connect( G_OBJECT( sss.start ), "clicked", G_CALLBACK( wybierzpoziom ), & 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;
}
P-65351
Badman
» 2012-09-25 14:25:09
U mnie działa tak:

Klikam Start, następnie Trudny, po czym klikam "Kliknij, aby zacząć". Wtedy w ramce Stan rywalizacji pojawia się napis false. W polu podaj liczbę wpisuję wartość 1 i OK wyświetla się ramce Stan rywalizacji napis 1, kiedy wpiszę wartość 0 lub wartość mniejszą od 0 mam napis zle.

czyli zgodnie z kodem programu :)

A co byś chiał aby wykonywał ?
P-65506
czosnek17
Temat założony przez niniejszego użytkownika
» 2012-09-25 18:22:13
No właśnie w tym problem mam.
A co byś chiał aby wykonywał ?

Miało to działać tak:
C/C++
// kod >> niżej wchodzę w funkcję
g_signal_connect( G_OBJECT( sss->wprowadz ), "clicked", G_CALLBACK( pobierz ), sss );
// tutaj kod, który ma się wyświetlić po wyjściu z funkcji, jeżeli wpisało się
// prawidłowe dane powinno się wyświetlić true, jeżeli nie to false

Tzn oczekiwałem, że g_signal_connect zachowa się tu jak normalna funkcja. Miała być w pętli od gry. Wczoraj wymyśliłem (szybko :P), jak inaczej to napisać (każde wejście w funkcje - kliknięcie można traktować jak 1 obrót pętli), ale może jednak da się to zrobić tak jak próbowałem wcześniej?
P-65525
Badman
» 2012-09-26 08:33:01
Gtk+ oparte jest na zdarzeniach !!!
Tak jak wspomniałeś musisz przepisać mająć na uwadzę, że funkcję zarejestrowane poprzez g_signal wykonują się tylko i wyłącznie po wystąpieniu konkretnego zdarzenia.
P-65572
czosnek17
Temat założony przez niniejszego użytkownika
» 2012-09-26 21:14:10
Było trzeba tak od razu :P, na szczęście już rozwiązałem problem :)
Zamykam.
P-65602
1 2 3 « 4 »
Poprzednia strona Strona 4 z 4