Was bedeutet g_signal_connect_swapped() zu tun?
Laut GObject Referenz
g_signal_connect_swapped(Beispiel detailed_signal, c_handler, data); verbindet eine GCallback-Funktion, um ein signal für ein bestimmtes Objekt. Die Instanz, in der das signal emittiert wird und Daten ausgetauscht werden beim Aufruf der Prozedur.
Ich nicht ganz, was das bedeutet. Bedeutet das, dass die data
auf das Objekt verweistinstance
und instance
wird, zeigen Sie auf das Objekt, auf die verwiesen wurde durch data
oder bin ich hier einem Irrtum?
Wenn erstere der Fall ist, dann was ist die Logik dahinter?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie richtig zu verstehen.
Diese ermöglicht Ihnen die tricks, wie die folgenden: Sie haben eine Taste (nennen wir es
button
), soll zu einem anderen zu verstecken widget (nennen wir estextview
), wenn Sie gedrückt werden.Können Sie dann tun
zu erreichen. Wenn die Taste gedrückt wird, erzeugt das 'clicked' - signal, und der callback wird aufgerufen, mit
textview
als erstes argument, undbutton
als die zweite. In diesem Fall wird die callback-istgtk_widget_hide()
das dauert nur ein argument, so das zweite argument wird ignoriert, weil das ist der Weg, die C-Aufrufkonvention funktioniert.Es ist das gleiche, wie die folgenden, aber kürzer.
Grundsätzlich müssen Sie schreiben, eine zusätzliche Funktion, wenn Sie manuell code Ihrer Schnittstelle. Natürlich, kann es einige weit mehr praktischen nutzen, dass habe ich nie verstanden.
self
als erstes argument übergeben, z.B.:g_signal_connect_swapped (self->some_internal_child, "button-press-event", (GCallback)my_mouse_handler, self)
. Tun, ohneswapped
würde bedeuten, dass eine hässliche Signatur auf der Empfängerseite mit einem 1. argument, das ist wohl nicht interessant in der Mehrzahl der Fälle, und die können Sie oft vonself->
sowieso. Oder zumindest das ist, wie ich gemacht habe, verwenden Sie diese so weit...