Seite 1 von 1
GTK+ Tutorial
Verfasst: Mo Jun 08, 2020 2:39 pm
von Xeon
Hallo Tutorial Autoren
Anordnung von GUI-Elementen:
https://www.proggen.org/doku.php?id=gui:gtk:boxes
Einsatz von GTK Boxen:
Code: Alles auswählen
#include <gtk/gtk.h>
int main(int argc, char** argv)
{
GtkWidget *window;
GtkWidget *vbox;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new("Element 1"), FALSE, FALSE, 0);
gtk_box_pack_end(GTK_BOX(vbox), gtk_label_new("Element 2"), FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new("Element 3"), FALSE, FALSE, 0);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Der obige Code ist korrekt, aber weiter unten hat sich ein Tippfehler eingeschlichen:
Die Parameter wurden vertauscht.
Liebe Grüße
von Xeon
Re: GTK+ Tutorial
Verfasst: Mo Jun 08, 2020 2:45 pm
von Xin
Ich weiß nicht, ob das GTK-Tutorial soweit brauchbar ist... da war schon lange keiner mehr dran. Ich habe den Fehler aber rausgeholt.
Da ist man mit Nufans Qt-Tutorial eventuell besser bedient.
Solltest Du da weiter machen, sag mir aber Bescheid, dann gucke ich da mal mit drüber.
Re: GTK+ Tutorial
Verfasst: Mo Jun 08, 2020 3:03 pm
von Xeon
Würde ich schon gerne da weiter machen, weil ich nur C kann.
Re: GTK+ Tutorial
Verfasst: Mo Jun 08, 2020 3:16 pm
von Xin
Ok, dann stell ggfs. Fragen.
Ich habe jetzt auch schon länger nichts mehr mit GTK gemacht, habe aber derzeit auch ein Projekt, wo ich über GTK nachdenke.
Re: GTK+ Tutorial
Verfasst: Mo Jun 08, 2020 3:42 pm
von Xeon
Xin hat geschrieben: ↑Mo Jun 08, 2020 2:45 pm
Ich weiß nicht, ob das GTK-Tutorial soweit brauchbar ist... da war schon lange keiner mehr dran. Ich habe den Fehler aber rausgeholt.
Wie meinst du das keiner mehr dran war? Kein Autor oder Benutzer?
Re: GTK+ Tutorial
Verfasst: Mo Jun 08, 2020 3:58 pm
von Xin
Xeon hat geschrieben: ↑Mo Jun 08, 2020 3:42 pm
Wie meinst du das keiner mehr dran war? Kein Autor oder Benutzer?
Es gibt keinen aktiven Autor hier. Ergo keiner, der direkt Fragen beantworten kann oder weiterschreibt.
Ich habe mit GTK mal was gemacht, ggfs. übernehme ich das dann. Aber ich hab zu selten Zeit.
Re: GTK+ Tutorial
Verfasst: Di Jun 09, 2020 1:27 pm
von Xeon
Wenn du mich fragst: Das GTK+ Tutorial ist bis jetzt spannend. Da ich kein Englisch kann (arbeite daran), bin ich dankbar, dass es ein Tutorial auf Deutsch gibt.
GTK+ Tutorial Signale
Verfasst: Mi Jun 10, 2020 12:27 pm
von Xeon
Bin jetzt hier angelangt:
https://www.proggen.org/doku.php?id=gui:gtk:signals
Die Callback Funktion:
Weiter oben steht folgender Text:
Mit der Funktion gtk_label_set_text ändern wir hier den Text unseres Labels. Nun interessieren uns aber die Argumente der Funktion. Denn wenn wir uns unsere Signalverknüpfung ansschauen (g_signal_connect), werden dort scheinbar gar keine Argumente übergeben. Also: Woher kommen diese zwei Zeiger?
Habe da anscheinend eine Wissenslücke in C.
Wie kann eine Funktion mal Parameter haben und mal nicht?
Ist es eine Rekursion?
Für eine Antwort bin ich dankbar
Liebe Grüße
Von Xeon
Re: GTK+ Tutorial Signale
Verfasst: Mi Jun 10, 2020 5:30 pm
von Xin
Xeon hat geschrieben: ↑Mi Jun 10, 2020 12:27 pm
Wie kann eine Funktion mal Parameter haben und mal nicht?
Die Funktion hat immer zwei Parameter.
Bei der Signal-Funktion wird allerdings nicht die Funktion selbst gerufen - also Parmeter an die Funktion übergeben - sondern die Funktion selbst ist der Parameter. Darum sind da auch keine Klammern:
Code: Alles auswählen
g_signal_connect(button, "clicked", G_CALLBACK(change_label), label);
Die Funktion wird wie eine Variable gehandhabt.
Signal heißt, dass wenn beim Widget button das Event "clicked" eintritt, dann ruft Gtk die Funktion change_label auf. Und diese Funktion, die da gerufen wird, hat 2 Parameter, sonst funktioniert das nicht.
Es kompiliert aber wahrscheinlich und fliegt Dir dann um die Ohren. Weil gtk erwartet eine Funktion mit genau diesen beiden Parametern und wenn Du da was anderes reinsteckst, passiert auch "was anderes".