[C/GTK]PROBLEM: GUI Programmierung mit C

      [C/GTK]PROBLEM: GUI Programmierung mit C

      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-Quellcode

      1. #include <gtk/gtk.h>
      2. #include <stdlib.h>
      3. #include <stdio.h>
      4. typedef struct _gui {
      5. GtkWidget* window;
      6. GtkWidget* table;
      7. GtkWidget* label1;
      8. GtkWidget* label2;
      9. GtkWidget* label3;
      10. GtkWidget* entry1;
      11. GtkWidget* entry2;
      12. GtkWidget* label4;
      13. GtkWidget* button1;
      14. } GuiModel;
      15. // Creating Functions
      16. void on_destroy(GtkWidget *src, gpointer data){
      17. gtk_main_quit();
      18. }
      19. void on_click_add(GtkWidget *src, gpointer data){
      20. GuiModel *m = (GtkWidget*)data;
      21. char* Summand1 = gtk_entry_get_text(GTK_ENTRY(m->entry1));
      22. char* Summand2 = gtk_entry_get_text(GTK_ENTRY(m->entry2));
      23. gtk_label_set_text(GTK_LABEL(m->label4), Summand1);
      24. }
      25. int main(int argc, char* argv[]){
      26. gtk_init(&argc, &argv);
      27. // Initializing
      28. GuiModel m;
      29. m.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      30. m.table = gtk_table_new(4,2,TRUE);
      31. m.label1 = gtk_label_new("Summand 1:");
      32. m.label2 = gtk_label_new("Summand 2:");
      33. m.label3 = gtk_label_new("Ergebnis :");
      34. m.label4 = gtk_label_new("");
      35. m.entry1 = gtk_entry_new();
      36. m.entry2 = gtk_entry_new();
      37. m.button1 = gtk_button_new_with_label("Berechnen");
      38. // Customizing
      39. gtk_window_set_title(GTK_WINDOW(m.window), "Aufgabe 2");
      40. gtk_window_set_default_size(GTK_WINDOW(m.window), 100,100);
      41. // Connecting Signals
      42. g_signal_connect(m.window, "destroy", G_CALLBACK(on_destroy), NULL);
      43. g_signal_connect(m.button1, "clicked", G_CALLBACK(on_click_add),&m);
      44. // Visualizing
      45. gtk_container_add(GTK_CONTAINER(m.window), m.table);
      46. gtk_table_attach_defaults(GTK_TABLE(m.table), m.label1, 0, 1, 0, 1);
      47. gtk_table_attach_defaults(GTK_TABLE(m.table), m.label2, 0, 1, 1, 2);
      48. gtk_table_attach_defaults(GTK_TABLE(m.table), m.label3, 0, 1, 2, 3);
      49. gtk_table_attach_defaults(GTK_TABLE(m.table), m.entry1, 1, 2, 0, 1);
      50. gtk_table_attach_defaults(GTK_TABLE(m.table), m.entry2, 1, 2, 1, 2);
      51. gtk_table_attach_defaults(GTK_TABLE(m.table), m.label4, 1, 2, 2, 3);
      52. gtk_table_attach_defaults(GTK_TABLE(m.table), m.button1, 0, 2, 3, 4);
      53. gtk_widget_show(m.label1);
      54. gtk_widget_show(m.label2);
      55. gtk_widget_show(m.label3);
      56. gtk_widget_show(m.entry1);
      57. gtk_widget_show(m.entry2);
      58. gtk_widget_show(m.label4);
      59. gtk_widget_show(m.button1);
      60. gtk_widget_show(m.table);
      61. gtk_widget_show(m.window);
      62. gtk_main();
      63. return 0;
      64. }
      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


      Grüß die, die mich gefickt haben oder nein besser ich warne Sie
      Sag ihnen, ich leid an Paranoia, nicht an Amnesie! - RAF Camora
      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.
      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-Quellcode

      1. void on_click_add(GtkWidget *src, gpointer data){
      2. GuiModel *m = (GuiModel*)data;
      3. gtk_entry_set_max_length(m->entry1, 6);
      4. gtk_entry_set_max_length(m->entry2, 6);
      5. int Summand1 = atoi(gtk_entry_get_text(GTK_ENTRY(m->entry1)));
      6. int Summand2 = atoi(gtk_entry_get_text(GTK_ENTRY(m->entry2)));
      7. int Erg = Summand1 + Summand2;
      8. // Erg in Temp reinschreiben
      9. char temp[100];
      10. sprintf(temp, "%d", Erg);
      11. gtk_label_set_text(GTK_LABEL(m->label4), temp);
      Alles anzeigen


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