Wie finde ich heraus, was GDK Ereignisse für ein GTK + Signal erforderlich sind?

StackOverflow https://stackoverflow.com/questions/808338

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin mit Glade-3 für mein GUI-Design, aber ich halte dieses Problem zu schlagen. Ich sehe nichts in den GTK + Dokumentation Mapping Signale an Veranstaltungen oder in Glade-3 (3.4.5). Gibt es einen Ort in der GTK + Quellcode um diese Informationen zu finden?

Hinweis: Es ist in dieser Frage wichtig zu erkennen, dass Ereignisse und Signale sind nicht dasselbe in GTK

.

Beispiel:

Ich habe eine EventBox, die die folgenden Ereignisse, um die Signale zu empfangen erfordert. Wie kann ich feststellen, welche Ereignisse von einem bestimmten Signal erforderlich sind?

Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event
War es hilfreich?

Lösung

Ok, ich glaube, ich weiß, was Sie meinen jetzt, ich diese Tabelle gefunden, die GTK-Signale und gdk Ereignisse passend auf. Hier ist .

Andere Tipps

Unter der Annahme, dass ich Ihre Frage interpretiert korrekt sind Sie wollen die Signale, die Sie in der Glade-Datei auf die Funktionen im Quellcode angegeben verbinden. Wie Sie dabei vorgehen, hängt, wenn Sie libglade verwenden die Dateien erzeugen oder GtkBuilder zu laden, beide sind ähnlich, aber ich werde in C geben Proben nur auf Vollständigkeit.

Mit libglade Sie es wie so tun würde:

GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file
glade_xml_signal_autoconnect(xml); // Connect the signals

GtkBuilder Mit ihm würde so aussehen:

GtkBuilder *xml = gtk_builder_new();
gtk_builder_add_from_file(xml, filename, NULL); // Load the file
gtk_builder_connect_signals(xml, NULL); // Connect the signals

Wenn GtkBuilder unter Verwendung der zweiten Parameter in der Signal Funktion verbinden kann mit einem Zeiger auf Daten ersetzt werden, die dann an die Signalbehandlungsroutinen übergeben werden.

Für die Zukunft würde ich mit GtkBuilder als libglade auf dem Weg ist veraltet zu werden.

Links

Hier sind die Links zu der relevanten Dokumentation über die beiden genannten Funktionen über

Sie können die Ereignisse erfassen mit gdk_event_handler_set()

Sie zuerst Ihre eigenen GDK Event-Handler beim Start registrieren:

gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);

... Benutzen Sie diese dann nützliche Informationen auszudrucken, und vergessen Sie nicht, um das Ereignis zu GTK + durch gtk_main_do_event() passieren wie hier:

void my_gdk_event_handler(GdkEvent *event, gpointer data)
{
    printf("Received GdkEvent of type %d", event->type);

    gtk_main_do_event(event); // Pass event to GTK+
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top