<HTML ><HEAD ><TITLE >Signal and Slot Support</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.61 "><LINK REL="HOME" TITLE="Python Bindings for Qt (v2.5)" HREF="t1.html"><LINK REL="PREVIOUS" TITLE="General Limitations" HREF="x116.html"><LINK REL="NEXT" TITLE="Static Member Functions" HREF="x189.html"></HEAD ><BODY CLASS="SECT1" ><DIV CLASS="NAVHEADER" ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Python Bindings for Qt (v2.5)</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="x116.html" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="x189.html" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="AEN169" >Signal and Slot Support</A ></H1 ><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="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="x116.html" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="t1.html" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="x189.html" >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 >