Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > ba44e1fd5abf263d5d9b90c956e5dbf3 > files > 33

PyQt-2.5-1mdk.i586.rpm

<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"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Static Member Functions</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>