📄 gtk-signals.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"><title>Signals</title><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="GTK+ Reference Manual"><link rel="up" href="gtkbase.html" title="Part II. GTK+ Core Reference"><link rel="prev" href="gtk-Feature-Test-Macros.html" title="Version Information"><link rel="next" href="gtk-Types.html" title="Types"><meta name="generator" content="GTK-Doc V1.9 (XML mode)"><link rel="stylesheet" href="style.css" type="text/css"><link rel="part" href="gtk.html" title="Part I. GTK+ Overview"><link rel="part" href="gtkbase.html" title="Part II. GTK+ Core Reference"><link rel="part" href="gtkobjects.html" title="Part III. GTK+ Widgets and Objects"><link rel="chapter" href="ch01.html" title="Object Hierarchy"><link rel="chapter" href="ch02.html" title="Widget Gallery"><link rel="chapter" href="WindowWidgets.html" title="Windows"><link rel="chapter" href="DisplayWidgets.html" title="Display Widgets"><link rel="chapter" href="ButtonWidgets.html" title="Buttons and Toggles"><link rel="chapter" href="NumericEntry.html" title="Numeric/Text Data Entry"><link rel="chapter" href="TextWidgetObjects.html" title="Multiline Text Editor"><link rel="chapter" href="TreeWidgetObjects.html" title="Tree, List and Icon Grid Widgets"><link rel="chapter" href="MenusAndCombos.html" title="Menus, Combo Box, Toolbar"><link rel="chapter" href="Actions.html" title="Action-based menus and toolbars"><link rel="chapter" href="SelectorWidgets.html" title="Selectors (File/Font/Color/Input Devices)"><link rel="chapter" href="LayoutContainers.html" title="Layout Containers"><link rel="chapter" href="Ornaments.html" title="Ornaments"><link rel="chapter" href="ScrollingWidgets.html" title="Scrolling"><link rel="chapter" href="Printing.html" title="Printing"><link rel="chapter" href="MiscObjects.html" title="Miscellaneous"><link rel="chapter" href="AbstractObjects.html" title="Abstract Base Classes"><link rel="chapter" href="PlugSocket.html" title="Cross-process Embedding"><link rel="chapter" href="SpecialObjects.html" title="Special-purpose features"><link rel="chapter" href="RecentDocuments.html" title="Recently Used Documents"><link rel="chapter" href="Builder.html" title="Interface builder"><link rel="chapter" href="DeprecatedObjects.html" title="Deprecated"><link rel="part" href="migrating.html" title="Part IV. Migrating from Previous Versions of GTK+"><link rel="chapter" href="gtk-migrating-checklist.html" title="Migration Checklist"><link rel="chapter" href="gtk-migrating-GtkFileChooser.html" title="Migrating from GtkFileSelection to GtkFileChooser"><link rel="chapter" href="gtk-migrating-GtkAction.html" title="Migrating from old menu and toolbar systems to GtkAction"><link rel="chapter" href="gtk-migrating-GtkComboBox.html" title="Migrating from GtkOptionMenu and GtkCombo to GtkComboBox and GtkComboBoxEntry"><link rel="chapter" href="gtk-migrating-GtkIconView.html" title="Migrating from GnomeIconList to GtkIconView"><link rel="chapter" href="gtk-migrating-GtkAboutDialog.html" title="Migrating from GnomeAbout to GtkAboutDialog"><link rel="chapter" href="gtk-migrating-GtkColorButton.html" title="Migrating from GnomeColorPicker to GtkColorButton"><link rel="chapter" href="gtk-migrating-GtkAssistant.html" title="Migrating from GnomeDruid to GtkAssistant"><link rel="chapter" href="gtk-migrating-GtkRecentChooser.html" title="Migrating from EggRecent to GtkRecentChooser"><link rel="chapter" href="gtk-migrating-GtkLinkButton.html" title="Migrating from GnomeHRef to GtkLinkButton"><link rel="chapter" href="gtk-migrating-GtkBuilder.html" title="Migrating from libglade to GtkBuilder"><link rel="chapter" href="gtk-migrating-tooltips.html" title="Migrating from GtkTooltips to GtkTooltip"><link rel="part" href="pt05.html" title="Part V. GTK+ Tools"><link rel="glossary" href="glossary.html" title="Glossary"><link rel="index" href="ix01.html" title="Index"><link rel="index" href="ix02.html" title="Index of deprecated symbols"><link rel="index" href="ix03.html" title="Index of new symbols in 2.2"><link rel="index" href="ix04.html" title="Index of new symbols in 2.4"><link rel="index" href="ix05.html" title="Index of new symbols in 2.6"><link rel="index" href="ix06.html" title="Index of new symbols in 2.8"><link rel="index" href="ix07.html" title="Index of new symbols in 2.10"><link rel="index" href="ix08.html" title="Index of new symbols in 2.12"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="gtk-Feature-Test-Macros.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="gtkbase.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">GTK+ Reference Manual</th><td><a accesskey="n" href="gtk-Types.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr><tr><td colspan="5" class="shortcuts"><nobr><a href="#id3330692" class="shortcut">Top</a>  |  <a href="#id3331418" class="shortcut">Description</a></nobr></td></tr></table><div class="refentry" lang="en"><a name="gtk-Signals"></a><div class="titlepage"></div><div class="refnamediv"><table width="100%"><tr><td valign="top"><h2><a name="id3330692"></a><span class="refentrytitle">Signals</span></h2><p>Signals — Object methods and callbacks</p></td><td valign="top" align="right"></td></tr></table></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">#include <gtk/gtk.h>#define <a class="link" href="gtk-Signals.html#GTK-SIGNAL-OFFSET:CAPS">GTK_SIGNAL_OFFSET</a>enum <a class="link" href="gtk-Signals.html#GtkSignalRunType">GtkSignalRunType</a>;<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a> <a class="link" href="gtk-Signals.html#gtk-signal-new">gtk_signal_new</a> (const <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a> *name, <a class="link" href="gtk-Signals.html#GtkSignalRunType">GtkSignalRunType</a> signal_flags, <a class="link" href="gtk-Types.html#GtkType">GtkType</a> object_type, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a> function_offset, <a class="link" href="gtk-Types.html#GtkSignalMarshaller">GtkSignalMarshaller</a> marshaller, <a class="link" href="gtk-Types.html#GtkType">GtkType</a> return_val, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a> n_args, ...);<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a> <a class="link" href="gtk-Signals.html#gtk-signal-newv">gtk_signal_newv</a> (const <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a> *name, <a class="link" href="gtk-Signals.html#GtkSignalRunType">GtkSignalRunType</a> signal_flags, <a class="link" href="gtk-Types.html#GtkType">GtkType</a> object_type, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a> function_offset, <a class="link" href="gtk-Types.html#GtkSignalMarshaller">GtkSignalMarshaller</a> marshaller, <a class="link" href="gtk-Types.html#GtkType">GtkType</a> return_val, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a> n_args, <a class="link" href="gtk-Types.html#GtkType">GtkType</a> *args);#define <a class="link" href="gtk-Signals.html#gtk-signal-lookup">gtk_signal_lookup</a> (name,object_type)#define <a class="link" href="gtk-Signals.html#gtk-signal-name">gtk_signal_name</a> (signal_id)void <a class="link" href="gtk-Signals.html#gtk-signal-emit">gtk_signal_emit</a> (<a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *object, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a> signal_id, ...);void <a class="link" href="gtk-Signals.html#gtk-signal-emit-by-name">gtk_signal_emit_by_name</a> (<a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *object, const <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a> *name, ...);void <a class="link" href="gtk-Signals.html#gtk-signal-emitv">gtk_signal_emitv</a> (<a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *object, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a> signal_id, <a class="link" href="gtk-Types.html#GtkArg">GtkArg</a> *args);void <a class="link" href="gtk-Signals.html#gtk-signal-emitv-by-name">gtk_signal_emitv_by_name</a> (<a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *object, const <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a> *name, <a class="link" href="gtk-Types.html#GtkArg">GtkArg</a> *args);#define <a class="link" href="gtk-Signals.html#gtk-signal-emit-stop">gtk_signal_emit_stop</a> (object,signal_id)void <a class="link" href="gtk-Signals.html#gtk-signal-emit-stop-by-name">gtk_signal_emit_stop_by_name</a> (<a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *object, const <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a> *name);#define <a class="link" href="gtk-Signals.html#gtk-signal-connect">gtk_signal_connect</a> (object,name,func,func_data)#define <a class="link" href="gtk-Signals.html#gtk-signal-connect-after">gtk_signal_connect_after</a> (object,name,func,func_data)#define <a class="link" href="gtk-Signals.html#gtk-signal-connect-object">gtk_signal_connect_object</a> (object,name,func,slot_object)#define <a class="link" href="gtk-Signals.html#gtk-signal-connect-object-after">gtk_signal_connect_object_after</a> (object,name,func,slot_object)<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gulong">gulong</a> <a class="link" href="gtk-Signals.html#gtk-signal-connect-full">gtk_signal_connect_full</a> (<a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *object, const <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a> *name, <a class="link" href="gtk-Types.html#GtkSignalFunc">GtkSignalFunc</a> func, <a class="link" href="gtk-Types.html#GtkCallbackMarshal">GtkCallbackMarshal</a> unsupported, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer">gpointer</a> data, <a class="link" href="gtk-Types.html#GtkDestroyNotify">GtkDestroyNotify</a> destroy_func, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> object_signal, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> after);void <a class="link" href="gtk-Signals.html#gtk-signal-connect-while-alive">gtk_signal_connect_while_alive</a> (<a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *object, const <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a> *name, <a class="link" href="gtk-Types.html#GtkSignalFunc">GtkSignalFunc</a> func, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer">gpointer</a> func_data, <a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *alive_object);void <a class="link" href="gtk-Signals.html#gtk-signal-connect-object-while-alive">gtk_signal_connect_object_while_alive</a> (<a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *object, const <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a> *name, <a class="link" href="gtk-Types.html#GtkSignalFunc">GtkSignalFunc</a> func, <a class="link" href="GtkObject.html" title="GtkObject">GtkObject</a> *alive_object);#define <a class="link" href="gtk-Signals.html#gtk-signal-disconnect">gtk_signal_disconnect</a> (object,handler_id)#define <a class="link" href="gtk-Signals.html#gtk-signal-disconnect-by-func">gtk_signal_disconnect_by_func</a> (object,func,data)#define <a class="link" href="gtk-Signals.html#gtk-signal-disconnect-by-data">gtk_signal_disconnect_by_data</a> (object,data)#define <a class="link" href="gtk-Signals.html#gtk-signal-handler-block">gtk_signal_handler_block</a> (object,handler_id)#define <a class="link" href="gtk-Signals.html#gtk-signal-handler-block-by-func">gtk_signal_handler_block_by_func</a> (object,func,data)#define <a class="link" href="gtk-Signals.html#gtk-signal-handler-block-by-data">gtk_signal_handler_block_by_data</a> (object,data)#define <a class="link" href="gtk-Signals.html#gtk-signal-handler-unblock">gtk_signal_handler_unblock</a> (object,handler_id)#define <a class="link" href="gtk-Signals.html#gtk-signal-handler-unblock-by-func">gtk_signal_handler_unblock_by_func</a> (object,func,data)#define <a class="link" href="gtk-Signals.html#gtk-signal-handler-unblock-by-data">gtk_signal_handler_unblock_by_data</a> (object,data)#define <a class="link" href="gtk-Signals.html#gtk-signal-handler-pending">gtk_signal_handler_pending</a> (object,signal_id,may_be_blocked)#define <a class="link" href="gtk-Signals.html#gtk-signal-handler-pending-by-func">gtk_signal_handler_pending_by_func</a> (object,signal_id,may_be_blocked,func,data)#define <a class="link" href="gtk-Signals.html#gtk-signal-default-marshaller">gtk_signal_default_marshaller</a></pre></div><div class="refsect1" lang="en"><a name="id3331418"></a><h2>Description</h2><p>The GTK+ signal system merely proxies the GLib signal system now. For future usage, direct use of the <ahref="/usr/share/gtk-doc/html/gobject/gobject-Signals.html">GSignal</a> API is recommended, this avoids significant performance hits where <a class="link" href="gtk-Types.html#GtkArg"><span class="type">GtkArg</span></a> structures have to be converted into <ahref="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>s.</p><div class="refsect2" lang="en"><a name="id3331460"></a><h3>What are signals?</h3><p>Signals are a way to get notification when something happensand to customize object behavior according to theuser's needs.Every <em class="wordasword">signal</em> is uniquely identified by a name,"class_name::signal_name", where signal_name might be something like"clicked" and class_name might be "GtkButton". Note that some other classmay also define a "clicked" callback, so long as it doesn't derive from<a class="link" href="GtkButton.html" title="GtkButton"><span class="type">GtkButton</span></a>.</p><p>When they are created, they are also assigned a unique positive integer,the signal id (1 is the first signal id- 0 is used to flag an error).Each is also tied to an array of types that describesthe prototype of the function pointer(s) (handlers) you mayconnect to the signal. Finally, every signal hasa default handler that is given by a function pointerin its class structure: it is run by default whenever thesignal is emitted. (It is possible that a signal willbe emitted and a user-defined handler will prevent the default handlerfrom being run.)</p><p>Signals are used by everyone, but they are onlycreated on a per class basis -- so you should not callcall <a class="link" href="gtk-Signals.html#gtk-signal-new"><code class="function">gtk_signal_new()</code></a> unless you are writinga new <a class="link" href="GtkObject.html" title="GtkObject"><span class="type">GtkObject</span></a> type. However, if you want to make a new signalfor an existing type, you may use <code class="function">gtk_object_class_user_signal_new()</code>to create a signal that doesn't correspond to a class's builtinmethods.</p></div><hr><div class="refsect2" lang="en"><a name="id3331540"></a><h3>How are signals used?</h3><p>There are two basic actions in the signal handling game.If you want notification of an event, you must <span class="emphasis"><em>connect</em></span>a function pointer and a data pointer to that signal; the data pointerwill be passed as the last argument to the function (so long as youare using the default marshalling functions).You will receive a connection id, a unique positive integercorresponding to that attachment.</p><p>Functions that want to notify the user of certain actions,<span class="emphasis"><em>emit</em></span> signals.</p></div><hr><div class="refsect2" lang="en"><a name="id3331569"></a><h3>Basic Terminology</h3><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><p><span class="term">signal</span></p></td><td><p>A class method, e.g. GtkButton::clicked.More precisely it is a unique class-branch/signal-name pair.This means you may not define a signal handler for a class which
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -