Domanda

Sto usando Glade-3 per la mia progettazione della GUI, ma continuo a colpire questo problema. Non vedo nulla nei segnali di mappatura della documentazione GTK + agli eventi o in Glade-3 (3.4.5). C'è un posto nel codice sorgente GTK + per trovare queste informazioni?

Nota: è importante in questa domanda riconoscere che eventi e segnali NON sono la stessa cosa in GTK.

Esempio:

Ho un eventbox che richiede i seguenti eventi per ricevere i seguenti segnali. Come faccio a determinare quali eventi sono richiesti da un determinato segnale?

Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event
È stato utile?

Soluzione

Ok, penso di sapere cosa intendi ora, ho trovato questa tabella che combacia con i segnali gtk e gli eventi gdk. Eccolo .

Altri suggerimenti

Supponendo che io abbia interpretato correttamente la tua domanda, vuoi collegare i segnali che hai specificato nel file Glade alle funzioni nel codice sorgente. Il modo in cui lo fai dipende se stai usando libglade per caricare i file generate o GtkBuilder, entrambi sono simili ma darò dei campioni in C solo per essere completo.

Usando libglade lo faresti così:

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

Usando GtkBuilder sarebbe così:

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

Quando si utilizza GtkBuilder, il secondo parametro nella funzione di connessione del segnale può essere sostituito con un puntatore ai dati che verranno quindi passati ai gestori del segnale.

In futuro, suggerirei di usare GtkBuilder mentre libglade sta per essere deprecato.

Link

Ecco i collegamenti alla documentazione pertinente sulle due funzioni sopra menzionate

Puoi catturare gli eventi con gdk_event_handler_set ()

Prima registra il tuo gestore di eventi GDK all'avvio:

gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);

... Quindi usalo per stampare qualsiasi informazione utile e non dimenticare di passare l'evento a GTK + attraverso gtk_main_do_event () come qui:

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+
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top