diff options
Diffstat (limited to 'python/pykde/doc/signal.html')
-rw-r--r-- | python/pykde/doc/signal.html | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/python/pykde/doc/signal.html b/python/pykde/doc/signal.html new file mode 100644 index 00000000..ab5b3f9d --- /dev/null +++ b/python/pykde/doc/signal.html @@ -0,0 +1,290 @@ +<HTML +><HEAD +><TITLE +>Signal and Slot Support</TITLE +><META +NAME="GENERATOR" +CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK +REL="HOME" +TITLE="Python Bindings for KDE (PyKDE-3.16.0)" +HREF="index.html"><LINK +REL="PREVIOUS" +TITLE="General Limitations" +HREF="limits.html"><LINK +REL="NEXT" +TITLE="Static Member Functions" +HREF="static.html"></HEAD +><BODY +CLASS="SECT1" +><DIV +CLASS="NAVHEADER" +><TABLE +SUMMARY="Header navigation table" +WIDTH="100%" +BORDER="0" +CELLPADDING="0" +CELLSPACING="0" +><TR +><TH +COLSPAN="3" +ALIGN="center" +>Python Bindings for KDE (PyKDE-3.16.0)</TH +></TR +><TR +><TD +WIDTH="10%" +ALIGN="left" +VALIGN="bottom" +><A +HREF="limits.html" +ACCESSKEY="P" +>Prev</A +></TD +><TD +WIDTH="80%" +ALIGN="center" +VALIGN="bottom" +></TD +><TD +WIDTH="10%" +ALIGN="right" +VALIGN="bottom" +><A +HREF="static.html" +ACCESSKEY="N" +>Next</A +></TD +></TR +></TABLE +><HR +ALIGN="LEFT" +WIDTH="100%"></DIV +><DIV +CLASS="SECT1" +><H1 +CLASS="SECT1" +><A +NAME="AEN81" +></A +>Signal and Slot Support</H1 +><DIV +CLASS="SECT2" +><H2 +CLASS="SECT2" +><A +NAME="AEN83" +></A +>General Signals and Slots</H2 +><P +>A signal may be either a Qt signal (specified using +<TT +CLASS="LITERAL" +>SIGNAL()</TT +>) or a Python signal (specified using +<TT +CLASS="LITERAL" +>PYSIGNAL()</TT +>).</P +><P +>A slot can be either a Python callable object, a Qt signal (specified using +<TT +CLASS="LITERAL" +>SIGNAL()</TT +>), a Python signal (specified using +<TT +CLASS="LITERAL" +>PYSIGNAL()</TT +>), or a Qt slot (specified using +<TT +CLASS="LITERAL" +>SLOT()</TT +>).</P +><P +>You connect signals to slots (and other signals) as you would from C++. For +example:</P +><TABLE +BORDER="0" +BGCOLOR="#E0E0E0" +WIDTH="100%" +><TR +><TD +><PRE +CLASS="PROGRAMLISTING" +>QObject.connect(a,SIGNAL("QtSig()"),pyFunction) +QObject.connect(a,SIGNAL("QtSig()"),pyClass.pyMethod) +QObject.connect(a,SIGNAL("QtSig()"),PYSIGNAL("PySig")) +QObject.connect(a,SIGNAL("QtSig()"),SLOT("QtSlot()")) +QObject.connect(a,PYSIGNAL("PySig"),pyFunction) +QObject.connect(a,PYSIGNAL("PySig"),pyClass.pyMethod) +QObject.connect(a,PYSIGNAL("PySig"),SIGNAL("QtSig()")) +QObject.connect(a,PYSIGNAL("PySig"),SLOT("QtSlot()"))</PRE +></TD +></TR +></TABLE +><P +>When a slot is a Python method that corresponds to a Qt slot then a signal can +be connected to either the Python method or the Qt slot. The following +connections achieve the same effect.</P +><TABLE +BORDER="0" +BGCOLOR="#E0E0E0" +WIDTH="100%" +><TR +><TD +><PRE +CLASS="PROGRAMLISTING" +>sbar = QScrollBar() +lcd = QLCDNumber() + +QObject.connect(sbar,SIGNAL("valueChanged(int)"),lcd.display) +QObject.connect(sbar,SIGNAL("valueChanged(int)"),lcd,SLOT("display(int)"))</PRE +></TD +></TR +></TABLE +><P +>The difference is that the second connection is made at the C++ level and is +more efficient.</P +><P +>Disconnecting signals works in exactly the same way.</P +><P +>Any instance of a class that is derived from the <TT +CLASS="LITERAL" +>QObject</TT +> +class can emit a signal using the <TT +CLASS="LITERAL" +>emit</TT +> method. This takes +two arguments. The first is the Python or Qt signal, the second is a Python +tuple which are the arguments to the signal. For example:</P +><TABLE +BORDER="0" +BGCOLOR="#E0E0E0" +WIDTH="100%" +><TR +><TD +><PRE +CLASS="PROGRAMLISTING" +>a.emit(SIGNAL("clicked()"),()) +a.emit(PYSIGNAL("pySig"),("Hello","World"))</PRE +></TD +></TR +></TABLE +><P +>Qt allows a signal to be connected to a slot that requires fewer arguments than +the signal passes. The extra arguments are quietly discarded. Python slots +can be used in the same way.</P +></DIV +><DIV +CLASS="SECT2" +><H2 +CLASS="SECT2" +><A +NAME="AEN103" +></A +>Slots in Menus, Toolbars and Actions</H2 +><P +>The C++ declarations for menu items or KActions are similar to these examples:</P +><TABLE +BORDER="0" +BGCOLOR="#E0E0E0" +WIDTH="100%" +><TR +><TD +><PRE +CLASS="PROGRAMLISTING" +>int QMenuData::insertItem (const QString & text, + const QObject * receiver, const char * member, + int accel = 0, int id = -1, int index = -1 ) + +KAction ( const QString& text, int accel, + const QObject* receiver, const char* slot, + QObject* parent, const char* name = 0 )</PRE +></TD +></TR +></TABLE +><P +>Notice the "const QObject* receiver, const char* slot" parameters for each declaration.</P +><P +>In PyKDE, these two parameters are replaced with a SINGLE parameter that specifies the +slot to be connected to the menu item, toolbar button or KAction:</P +><TABLE +BORDER="0" +BGCOLOR="#E0E0E0" +WIDTH="100%" +><TR +><TD +><PRE +CLASS="PROGRAMLISTING" +>p = insertItem ("Open", self.slotOpen, 0, -1, -1) + +action = KAction ("Open", 0, self.slotOpen, None, 0)</PRE +></TD +></TR +></TABLE +><P +>This substitution applies to appropriate methods in KStdAction, KAction and related +subclasses, KAccelMenu and KToolBar</P +></DIV +></DIV +><DIV +CLASS="NAVFOOTER" +><HR +ALIGN="LEFT" +WIDTH="100%"><TABLE +SUMMARY="Footer navigation table" +WIDTH="100%" +BORDER="0" +CELLPADDING="0" +CELLSPACING="0" +><TR +><TD +WIDTH="33%" +ALIGN="left" +VALIGN="top" +><A +HREF="limits.html" +ACCESSKEY="P" +>Prev</A +></TD +><TD +WIDTH="34%" +ALIGN="center" +VALIGN="top" +><A +HREF="index.html" +ACCESSKEY="H" +>Home</A +></TD +><TD +WIDTH="33%" +ALIGN="right" +VALIGN="top" +><A +HREF="static.html" +ACCESSKEY="N" +>Next</A +></TD +></TR +><TR +><TD +WIDTH="33%" +ALIGN="left" +VALIGN="top" +>General Limitations</TD +><TD +WIDTH="34%" +ALIGN="center" +VALIGN="top" +> </TD +><TD +WIDTH="33%" +ALIGN="right" +VALIGN="top" +>Static Member Functions</TD +></TR +></TABLE +></DIV +></BODY +></HTML +>
\ No newline at end of file |