[C/C++] GTK-Programmierung Checkbox-Status[gelöst]

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von newyork, 22. Februar 2009 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 22. Februar 2009
    GTK-Programmierung Checkbox-Status[gelöst]

    Moin, hab folgenden Code:

    Code:
     check = gtk_check_button_new_with_label("let me click");
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
     gtk_fixed_put(GTK_FIXED(fixed), check, 100, 100);
    
    
     button = gtk_button_new_with_label("quit");
     gtk_fixed_put(GTK_FIXED(fixed), button, 50, 50);
     gtk_widget_set_size_request(button, 80, 30);
     g_signal_connect(G_OBJECT(button), "clicked", 
     G_CALLBACK(gtk_main_quit), G_OBJECT(window));
    
    
    check ist eine checkbox die wenn das Programm startet _nicht_ aktiviert ist.

    button ist ein einfacher Button bei dessen Klick sich das Programm beendet.

    Ich habe nun vor das der Button nur seine "Quit-Funktion" ausführt wenn die checkbox aktiv ist.

    Um den Status der checbox zu prüfen habe ich soweit ich weiss 2 Möglichkeiten
    Code:
     g_object_get(button, "active", &PRUEF, NULL);
     if(PRUEF)
     ...........
    
    und

    Code:
     if(GTK_TOGGLE_BUTTON(check)->active)
     .....
    
    Das Problem ist nun folgendes, ich kann den Status der checkbox mit der 1. Möglichkeit erfolgreich abfragen, aber das ganze wird halt nur einmal durchlaufen, dass heisst wenn ich die checkbox nachdem start anklicke bleibt der Status auf "active=false", da ich sie beim Programmstart auf diesen setze. Meine Frage lautet nun wie kann ich die Prüfung der checkbox so einbauen, sodass sich das Ergebnis der Prüfung auf die Funktion des Buttons auswirkt?
     
  2. 22. Februar 2009
    AW: GTK-Programmierung Checkbox-Status

    Ich hab noch nie etwas mit GTK gemacht. Hab mir deinen Post drei mal durchgelesen, ich hoffe ich hab es richtig verstanden.

    Du hast eine Checkbox und einen Button. Und das Programm soll beendet werden, wenn der Nutzer den Button drückt und gleichzeitig die Checkbox aktiviert ist.

    Ich hab schon mit einigen GUI-Toolkits gearbeitet und ich würde an follgender Stelle einhacken:
    Code:
     g_signal_connect(G_OBJECT(button), "clicked", 
     G_CALLBACK(gtk_main_quit), G_OBJECT(window));
    
    Warum bindest du das clicked Event and die gtk_main_quit funktion? Die gtk_main_quit Funktion beendet das Programm, richtig? Dann aber wird das Programm ja immer beendet, wenn du auf den Button klickst, egal was mit der Checkbox los ist.

    An deiner Stelle würde ich eine eigene Funktion schreiben, die etwa so aussieht:

    Code:
    ...
    if(GTK_TOGGLE_BUTTON(check)->active)
     gtk_main_quit();
    ...
    
    Und dann diese Funktion als Callback für das clicked Signal binden. Musst du mal schauen, was für Parameter und Rückgabetypen so eine Funktion dann braucht, aber sollte nicht so schwer zu finden sein
     
  3. 22. Februar 2009
    AW: GTK-Programmierung Checkbox-Status

    Hey!

    Wie testitest schon sagte:
    Erstelle einfach einen eigenen Callback fuer den Button.
    Diese Funktion ueberprueft dann, ob der Checkbutton aktiviert ist oder nicht, und reagiert je nach dem.

    Die Funktion, wie man herauskriegt, ob ein Button aktiviert ist oder nicht, ist uebrigens 'gtk_toggle_button_get_active ()'.

    Ich verstehe deinen Post auch nicht ganz, aber wenn du willst, dass die Callback-Funktion des Buttons geaendert wird, setze einfach einem neuen Callback fuer das Signal "toggled" auf den Checkbutton; dieser Callback aendert dann die Funktion des Buttons fuer "clicked".

    Mfg,

    Kolazomai
     
  4. 23. Februar 2009
    AW: GTK-Programmierung Checkbox-Status

    Hab das Problem nun gelöst:

    Wie von euch geraten hab ich ne Funktion erstellt,
    Code:
    ...
    if(gtk_toggle_button_get_active(check))
    gtk_main_quit();
    ...
    
    und alles klappt, weiss auch nicht warum ich mich da so schwer getan hab .

    Naja Problem gelöst, BW an beide raus!

    Wer eventuell am Ende den Code haben will --> PM

    mfg nY
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.