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ść
Badman
» 2012-08-30 12:12:56
Po niedzieli będę miał dostęp do kompilatora i wtedy się wypowiem.
Na daną chwilę to mogę tylko podpowiedzieć: sprawdź wartość sss->sprawdzdane przed if( sss->sprawdzdane == true )
poprzez wyświetlenie wartości np.: g_print ( "Wartość %d\n", sss->sprawdzdane );
P-64005
czosnek17
Temat założony przez niniejszego użytkownika
» 2012-08-30 22:39:00
sss->sprawdzdane == 0
P-64107
Badman
» 2012-09-03 17:28:27
Więc wyświetla tekst false ?
P-64308
czosnek17
Temat założony przez niniejszego użytkownika
» 2012-09-08 19:12:40
Więc wyświetla tekst false ?
Tak, ale tylko po włączeniu programu, przed pierwszym wprowadzeniem liczby. Potem nie wyświetla już ani true, ani false.
Odpisuje dopiero teraz, bo grafika poszła...
Jeżeli w komputerze coś strzela, to wiedz, że coś się dzieje.
P-64621
czosnek17
Temat założony przez niniejszego użytkownika
» 2012-09-12 21:40:33
Odświeżam.

E: dać cały kod?
P-64849
Badman
» 2012-09-16 12:45:03
TAK
P-65041
czosnek17
Temat założony przez niniejszego użytkownika
» 2012-09-16 13:29:41
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";
    const gchar * tr = "true";
    const gchar * fa = "false";
   
   
   
   
    //const gchar * wczyt;
    const gchar * tab[ 10 ] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
    //sss->wczyt = gtk_entry_get_text(GTK_ENTRY(sss->poletxt));
   
    if( !g_strcmp0( sss->wczyt, tab[ 0 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 1 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 2 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 3 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 4 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 5 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 6 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 7 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 8 ] ) ||
    !g_strcmp0( sss->wczyt, tab[ 9 ] ) ||
    !g_strcmp0( sss->wczyt, zzz ) )
    {
       
       
        if( !g_strcmp0( sss->wczyt, tab[ 0 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 0 ] );
            sss->liczbazm = 1;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 1 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 1 ] );
            sss->liczbazm = 2;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 2 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 2 ] );
            sss->liczbazm = 3;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 3 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 3 ] );
            sss->liczbazm = 4;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 4 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 4 ] );
            sss->liczbazm = 5;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 5 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 5 ] );
            sss->liczbazm = 6;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 6 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 6 ] );
            sss->liczbazm = 7;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 7 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 7 ] );
            sss->liczbazm = 8;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 8 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 8 ] );
            sss->liczbazm = 9;
        }
       
        if( !g_strcmp0( sss->wczyt, tab[ 9 ] ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 9 ] );
            sss->liczbazm = 10;
        }
       
        sss->sprawdzdane = true;
       
        if( !g_strcmp0( sss->wczyt, zzz ) )
        {
            gtk_label_set_text( GTK_LABEL( sss->etykieta ), nic );
            sss->sprawdzdane = false;
        }
       
    } //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 );
    const gchar * zm[ 3 ] = { "1", "2", "3" };
    g_signal_connect( G_OBJECT( sss->wprowadz ), "clicked", G_CALLBACK( pobierz ), sss ); // to w pętli, operacje na  sss->liczbazm
   
    //if(sss->sprawdzdane==true)
    //gtk_window_set_opacity(GTK_WINDOW(sss->sokno), 0.5);
    //else
    //gtk_window_set_opacity(GTK_WINDOW(sss->sokno), 1 );
   
    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-65043
Badman
» 2012-09-21 13:51:33
Moim zdaniem nie może działać, bo w definicji struktury masz:
C/C++
const gchar * tab[ 10 ];

co oznacza, że przy deklaracji "obiektu" struktury, w  Twoim przypadku struct struktura sss;
zostanie przydzielone pamięci w wolnym tłumaczeniu  10 wskaźników typu gchar.
Poźniej robisz:
sss.tab = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };

kurcze, nie wiem dlaczego kompilator wogóle Ci pozwolił skompilować :)
każdy zapis typu "1" to defakto 2 bajty, jednen na znak 1, drugi tzw. NULL terminator, czyli \0

Uważam, że nie jest odpowiednio przydzielana pamięć, później pewnie w trakcie programu jest nadpisywan pamięć i program nie działa zgodnie z założeniami...
P-65330
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona