summaryrefslogtreecommitdiffstats
path: root/python/pykde/doc/signal.html
diff options
context:
space:
mode:
Diffstat (limited to 'python/pykde/doc/signal.html')
-rw-r--r--python/pykde/doc/signal.html290
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 &#38; text,
+ const QObject * receiver, const char * member,
+ int accel = 0, int id = -1, int index = -1 )
+
+KAction ( const QString&#38; 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"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Static Member Functions</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+> \ No newline at end of file