1. Forum
    1. Unerledigte Themen
  2. Artikel
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  4. Blog
    1. Artikel
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Blog-Artikel
  • Seiten
  • Erweiterte Suche
  1. StageTwo - Deine Wohlfühloase
  2. Developer & GFX Section
  3. Coding Allgemein

[C/GTK]PROBLEM: GUI Programmierung mit C

  • v0lt
  • 8. Dezember 2016 um 21:52
  • v0lt
    Hacker
    Reaktionen
    1
    Punkte
    1.681
    Beiträge
    285
    Geburtstag
    8. August 1995 (31)
    Geschlecht
    Männlich
    Wohnort
    Bayern
    • 8. Dezember 2016 um 21:52
    • #1

    Hallo Community,

    ich habe keine Ahnung wie viele Leute hier noch aktiv sind und ob mir jemand helfen kann, dennoch stell ich mal meine Anfrage.

    Ich befinde mich aktuell im 1. Semester meines Med. Informatik Studiums und bin heute auf eine Schwierigkeit während des Programmierens gekommen. Ich habe mit C und GTK ein Fenster programmiert mit 2 Eingabe Felder, 1 Button und einem Label für das Ergebnis. Wenn ich auf den Button klicke, sollen die Zahlen aus Feld 1 und Feld 2 addiert werden und das Ergebnis dann in das Label eingetragen werden.

    Aktuell sieht mein Code so aus:

    Spoiler anzeigen
    C
    #include <gtk/gtk.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    
    typedef struct _gui {
        GtkWidget* window;
        GtkWidget* table;
        GtkWidget* label1;
        GtkWidget* label2;
        GtkWidget* label3;
        GtkWidget* entry1;
        GtkWidget* entry2;
        GtkWidget* label4;
        GtkWidget* button1;
    } GuiModel;
    
    
    
    
    // Creating Functions
    void on_destroy(GtkWidget *src, gpointer data){
        gtk_main_quit();
    }
    
    
    void on_click_add(GtkWidget *src, gpointer data){
        GuiModel *m = (GtkWidget*)data;
        char* Summand1 = gtk_entry_get_text(GTK_ENTRY(m->entry1));
        char* Summand2 = gtk_entry_get_text(GTK_ENTRY(m->entry2));
        gtk_label_set_text(GTK_LABEL(m->label4), Summand1);
    
    
    }
    
    
    int main(int argc, char* argv[]){
        gtk_init(&argc, &argv);
    
    
    // Initializing
        GuiModel m;
            m.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
            m.table = gtk_table_new(4,2,TRUE);
            m.label1 = gtk_label_new("Summand 1:");
            m.label2 = gtk_label_new("Summand 2:");
            m.label3 = gtk_label_new("Ergebnis :");
            m.label4 = gtk_label_new("");
            m.entry1 = gtk_entry_new();
            m.entry2 = gtk_entry_new();
            m.button1 = gtk_button_new_with_label("Berechnen");
    
    
    // Customizing
        gtk_window_set_title(GTK_WINDOW(m.window), "Aufgabe 2");
        gtk_window_set_default_size(GTK_WINDOW(m.window), 100,100);
    
    
    // Connecting Signals
        g_signal_connect(m.window, "destroy", G_CALLBACK(on_destroy), NULL);
        g_signal_connect(m.button1, "clicked", G_CALLBACK(on_click_add),&m);
    
    
    // Visualizing
        gtk_container_add(GTK_CONTAINER(m.window), m.table);
    
    
        gtk_table_attach_defaults(GTK_TABLE(m.table), m.label1, 0, 1, 0, 1);
        gtk_table_attach_defaults(GTK_TABLE(m.table), m.label2, 0, 1, 1, 2);
        gtk_table_attach_defaults(GTK_TABLE(m.table), m.label3, 0, 1, 2, 3);
        gtk_table_attach_defaults(GTK_TABLE(m.table), m.entry1, 1, 2, 0, 1);
        gtk_table_attach_defaults(GTK_TABLE(m.table), m.entry2, 1, 2, 1, 2);
        gtk_table_attach_defaults(GTK_TABLE(m.table), m.label4, 1, 2, 2, 3);
        gtk_table_attach_defaults(GTK_TABLE(m.table), m.button1, 0, 2, 3, 4);
    
    
        gtk_widget_show(m.label1);
        gtk_widget_show(m.label2);
        gtk_widget_show(m.label3);
        gtk_widget_show(m.entry1);
        gtk_widget_show(m.entry2);
        gtk_widget_show(m.label4);
        gtk_widget_show(m.button1);
        gtk_widget_show(m.table);
        gtk_widget_show(m.window);
    
    
        gtk_main();
    
    
        return 0;
    }
    Alles anzeigen

    Jedoch funktioniert meine on_click_add Funktion nicht richtig (Im Code ist es eh falsch). Wie kann ich zwei char Zeiger in Integer umwandeln, sodass ich damit rechnen kann und dann wieder in einen char Zeiger umwandeln, dass ich den Ausgeben kann?

    Viele Grüße
    v0lt

    [align=center]

    Grüß die, die mich gefickt haben oder nein besser ich warne Sie
    Sag ihnen, ich leid an Paranoia, nicht an Amnesie! - RAF Camora

  • AOL
    I can't hear you over the sound of how awesome I am!
    Reaktionen
    228
    Punkte
    8.678
    Beiträge
    1.615
    Geschlecht
    Männlich
    Beruf
    Postdoc
    Hobbys
    Geschichte von morgen schreiben
    • 9. Dezember 2016 um 09:51
    • #2

    Die Funktion gtk_entry_get_text liefert dir "const gchar *". Damit wirst du sicherlich bei einer Suche nach "gchar* int cast" auf Stackoverflow fündig. Dort ist das bestimmt sehr ausführlich erklärt. Scheinbar ist gchar auch nur ein typedef für char.

  • v0lt
    Hacker
    Reaktionen
    1
    Punkte
    1.681
    Beiträge
    285
    Geburtstag
    8. August 1995 (31)
    Geschlecht
    Männlich
    Wohnort
    Bayern
    • 9. Dezember 2016 um 14:10
    • #3

    hab es nun so gelöst, indem ich meine Summand auf Integer umwandle und dann mit Hilfe von sprintf in ein Char Array eintrage.

    gchar ist allerdings nur ein typedef für char in GTK


    C
    void on_click_add(GtkWidget *src, gpointer data){
        GuiModel *m = (GuiModel*)data;
    
    
        gtk_entry_set_max_length(m->entry1, 6);
        gtk_entry_set_max_length(m->entry2, 6);
    
    
        int Summand1 = atoi(gtk_entry_get_text(GTK_ENTRY(m->entry1)));
        int Summand2 = atoi(gtk_entry_get_text(GTK_ENTRY(m->entry2)));
        int Erg = Summand1 + Summand2;
        // Erg in Temp reinschreiben
        char temp[100];
        sprintf(temp, "%d", Erg);
    
    
        gtk_label_set_text(GTK_LABEL(m->label4), temp);
    Alles anzeigen

    [align=center]

    Grüß die, die mich gefickt haben oder nein besser ich warne Sie
    Sag ihnen, ich leid an Paranoia, nicht an Amnesie! - RAF Camora

Benutzer online in diesem Thema

  • 1 Besucher
  1. Datenschutzerklärung
  2. Impressum