Funktionsaufruf in ereignisgesteuerter Umgebung
Verfasst: So Apr 17, 2016 11:38 am
Hallo,
versuche in die Geheimnisse der event gesteuerten Programmierung mit Gtk+ und cairo vorzudringen, aber an folgendem Problem komme ich nicht so recht weiter :
Gegeben sei die Programmsituation :
Frage : Wie kann ich aus der Funktion 'verarbeite_daten()' die Funktion 'on_draw_event()' aufrufen ?
Da es an dieser Stelle keinen Button, Mausklick o.ä. gibt, muss das Signal vom Programm selbst erzeugt werden.
In https://developer.gnome.org/gobject/uns ... gnals.html habe ich mit g_signal_new() und g_signal_emit()
zwar zwei mögliche Kandidaten dafür gefunden, aber mangels Vorwissen sind die dort gegebenen Hinweise für mich noch wenig verständlich. Ich bräuchte das etwas mehr für Einsteiger-Niveau aufbereitet. Vielleicht gibt es ja auch noch andere Lösungsansätze.
Ich hoffe, Ihr könnt mir da weiterhelfen.
Danke
jolico
versuche in die Geheimnisse der event gesteuerten Programmierung mit Gtk+ und cairo vorzudringen, aber an folgendem Problem komme ich nicht so recht weiter :
Gegeben sei die Programmsituation :
Code: Alles auswählen
void verarbeite_daten(GtkButton *trigger, gpointer entry)
{
/* die hier verarbeiteten Daten sind anschließend automatisch in
die drawing area 'darea' auszugeben
dazu soll hier vom Programm on_draw_event() aufgerufen werden. */
}
static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data)
{
zeichne_was(cr);
schreibe_was(cr);
return FALSE;
}
int main(int argc, char** argv)
{
/* der übliche Programm-Aufbau */
/* in diese drawing area sollen die Ausgaben erfolgen */
darea = gtk_drawing_area_new();
/* hier wird die Verarbeitung der Daten angestoßen */
g_signal_connect(button, "clicked", G_CALLBACK(verarbeite_daten), entry);
/* erstmalige Daten-Ausgabe bei Programmstart, (Basis-Information) */
g_signal_connect(G_OBJECT(darea), "draw", G_CALLBACK(on_draw_event), NULL);
/* weiterer Programmcode */
}
Frage : Wie kann ich aus der Funktion 'verarbeite_daten()' die Funktion 'on_draw_event()' aufrufen ?
Da es an dieser Stelle keinen Button, Mausklick o.ä. gibt, muss das Signal vom Programm selbst erzeugt werden.
In https://developer.gnome.org/gobject/uns ... gnals.html habe ich mit g_signal_new() und g_signal_emit()
zwar zwei mögliche Kandidaten dafür gefunden, aber mangels Vorwissen sind die dort gegebenen Hinweise für mich noch wenig verständlich. Ich bräuchte das etwas mehr für Einsteiger-Niveau aufbereitet. Vielleicht gibt es ja auch noch andere Lösungsansätze.
Ich hoffe, Ihr könnt mir da weiterhelfen.
Danke
jolico