##// END OF EJS Templates
added static overloads for connect and disconnect...
florianlink -
r60:c24aeec09ca4
parent child
Show More
@@ -1,508 +1,509
1 1 #ifndef _PYTHONQTDOC_H
2 2 #define _PYTHONQTDOC_H
3 3
4 4 /*
5 5 *
6 6 * Copyright (C) 2006 MeVis Research GmbH All Rights Reserved.
7 7 *
8 8 * This library is free software; you can redistribute it and/or
9 9 * modify it under the terms of the GNU Lesser General Public
10 10 * License as published by the Free Software Foundation; either
11 11 * version 2.1 of the License, or (at your option) any later version.
12 12 *
13 13 * This library is distributed in the hope that it will be useful,
14 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 16 * Lesser General Public License for more details.
17 17 *
18 18 * Further, this software is distributed without any warranty that it is
19 19 * free of the rightful claim of any third person regarding infringement
20 20 * or the like. Any license provided herein, whether implied or
21 21 * otherwise, applies only to this software file. Patent licenses, if
22 22 * any, provided herein do not apply to combinations of this program with
23 23 * other software, or any other product whatsoever.
24 24 *
25 25 * You should have received a copy of the GNU Lesser General Public
26 26 * License along with this library; if not, write to the Free Software
27 27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 28 *
29 29 * Contact information: MeVis Research GmbH, Universitaetsallee 29,
30 30 * 28359 Bremen, Germany or:
31 31 *
32 32 * http://www.mevis.de
33 33 *
34 34 */
35 35
36 36 //----------------------------------------------------------------------------------
37 37 /*!
38 38 // \file PythonQtDoc.h
39 39 // \author Florian Link
40 40 // \author Last changed by $Author: florian $
41 41 // \date 2006-10
42 42 */
43 43 //----------------------------------------------------------------------------------
44 44
45 45 /*!
46 46 \if USE_GLOBAL_DOXYGEN_DOC
47 47 \page PythonQtPage PythonQt Overview
48 48 \else
49 49 \mainpage PythonQt Overview
50 50 \endif
51 51
52 52 \section Introduction
53 53
54 54 \b PythonQt is a dynamic Python (http://www.python.org) binding for Qt (http://www.qtsoftware.com).
55 55 It offers an easy way to embed the Python scripting language into
56 56 your Qt applications. It makes heavy use of the QMetaObject system and thus requires Qt4.x.
57 57
58 58 The focus of PythonQt is on embedding Python into an existing C++ application, not on writing the whole
59 59 application completely in Python. If you want to write your whole application in Python,
60 60 you should use <a href="http://www.riverbankcomputing.co.uk/pyqt/">PyQt</a> instead.
61 61
62 62 If you are looking for a simple way to embed Python objects into your C++/Qt Application
63 63 and to script parts of your application via Python, PythonQt is the way to go!
64 64
65 65 PythonQt is a stable library that was developed to make the
66 66 Image Processing and Visualization platform MeVisLab (http://www.mevislab.de)
67 67 scriptable from Python.
68 68
69 69 \section Download
70 70
71 71 PythonQt is hosted on SourceForge at http://sourceforge.net/projects/pythonqt , you can access it via SVN
72 72 or download a tarball.
73 73
74 74 \section Licensing
75 75
76 76 PythonQt is distributed under the LGPL license, so it pairs well with the LGPL of the Qt 4.5 release and allows
77 77 to be used in commercial applications when following the LGPL 2.1 obligations.
78 78
79 79 \section LicensingWrapper Licensing of Wrapper Generator
80 80
81 81 The build system of PythonQt makes use of a modified version of the GPL'ed QtScript generator,
82 82 located in the "generator" directory.
83 83
84 84 See http://labs.trolltech.com/page/Projects/QtScript/Generator for details on the original project.
85 85 Thanks a lot to the QtJambi guys and the QtScript Generator project for the C++ parser and
86 86 Qt typesystem files!
87 87
88 88 The PythonQt wrappers generated by the generator located in the "generated_cpp" directory are distributed under the LGPL,
89 89 they are not restriced by the GPL.
90 90
91 91 The generated wrappers are pre-generated and checked-in for Qt 4.4.3, so you only need to build and run the
92 92 generator when you want to build additional wrappers or you want to upgrade/downgrade to an newer Qt version.
93 93 You may use the generator to generate C++ bindings for your own C++ classes (e.g. to make them deriveable in Python),
94 94 , but this is currently not documented and involves creating your own typesystem files.
95 95
96 96 \section Features
97 97
98 98 The following are the built-in features of the PythonQt library:
99 99
100 100 - Access all \b slots, \b properties, children and registered enums of any QObject derived class from Python
101 101 - Connecting Qt Signals to Python functions (both from within Python and from C++)
102 102 - Easy wrapping of Python objects from C++ with smart, reference-counting PythonQtObjectPtr.
103 103 - Convenient conversions to/from QVariant for PythonQtObjectPtr.
104 104 - Wrapping of C++ objects (which are not derived from QObject) via PythonQtCppWrapperFactory
105 105 - Extending C++ and QObject derived classes with additional slots, static methods and constructors (see Decorators)
106 106 - StdOut/Err redirection to Qt signals instead of cout
107 107 - Interface for creating your own \c import replacement, so that Python scripts can be e.g. signed/verified before they are executed (PythonQtImportFileInterface)
108 108 - Mapping of plain-old-datatypes and ALL QVariant types to and from Python
109 109 - Support for wrapping of user QVariant types which are registerd via QMetaType
110 110 - Support for Qt namespace (with all enumerators)
111 111 - All PythonQt wrapped objects support the dir() statement, so that you can see easily which attributes a QObject, CPP object or QVariant has
112 112 - No preprocessing/wrapping tool needs to be started, PythonQt can script any QObject without prior knowledge about it (except for the MetaObject information from the \b moc)
113 113 - Multiple inheritance for C++ objects (e.g. a QWidget is derived from QObject and QPaintDevice, PythonQt will automatically cast a QWidget to a QPaintDevice when needed)
114 114 - Polymorphic downcasting (if e.g. PythonQt sees a QEvent, it can downcast it depending on the type(), so the Python e.g. sees a QPaintEvent instead of a plain QEvent)
115 115 - Deriving C++ objects from Python and overwriting virtual method with a Python implementation (requires usage of wrapper generator or manual work!)
116 116 - Extensible handler for Python/C++ conversion of complex types, e.g. mapping of QVector<SomeObject> to/from a Python array
117 117
118 118 \section FeaturesQtAll Features (with PythonQt_QtAll linked in)
119 119
120 120 Thanks to the new wrapper generator, PythonQt now offers the additional PythonQt_QtAll library which wraps the complete Qt API, including all C++ classes and all non-slots on QObject derived classes.
121 121 This offers the following features:
122 122
123 123 - Complete Qt API wrapped and accessible
124 124 - The following modules are available as submodule of the PythonQt module:
125 125 - QtCore
126 126 - QtGui
127 127 - QtNetwork
128 128 - QtOpenGL
129 129 - QtSql
130 130 - QtSvg
131 131 - QtUiTools
132 132 - QtWebKit
133 133 - QtXml
134 134 - QtXmlPatterns
135 135 - (phonon, QtHelp, assistant, designer are currently not supported, this would require some additional effort on the code generator)
136 136 - For convenience, all classes are also available in the PythonQt.Qt module, for people who do not care in which module a class is located
137 137 - Any Qt class that has virtual methods can be easily derived from Python and the virtual methods can be reimplemented in Python
138 138 - Polymorphic downcasting on QEvent, QGraphicsItem, QStyleOption, ...
139 139 - Multiple inheritance support (e.g. QGraphicsTextItem is a QObject AND a QGraphicsItem, PythonQt will handle this well)
140 140
141 141 \section Comparision Comparision with PyQt
142 142
143 143 - PythonQt is not as Pythonic as PyQt in many details (e.g. operator mapping, pickling, translation support, ...) and it is maily thought for embedding and intercommunication between Qt/Cpp and Python
144 144 - PythonQt allows to communicate in both directions, e.g. calling a Python object from C++ AND calling a C++ method from Python, while PyQt only handles the Python->C++ direction
145 145 - PythonQt offers properties as Python attributes, while PyQt offers them as setter/getter methods (e.g. QWidget.width is a property in PythonQt and a method in PyQt)
146 - PythonQt does not auto-convert objects, e.g. when a QPainter expects a QBrush and you pass a QColor, it is rejected, you will need to write QBrush(QColor(1,2,3)) instead
147 - PythonQt returns/handles enums/flags as integers, which can cause problems on overloads that take ints and enums, a future version might use an own enum type (like PyQt does)
146 - PythonQt does not (yet?) offer QtCore.SIGNAL() and QtCore.SLOT() methods, connect and disconnect just take strings for signals and slots
147 - QObject.emit to emit Qt signals from Python is not yet possible
148 - Ownership of objects is a bit different in PythonQt, currently Python classes derived from a C++ class need to be manually references in PythonQt to not get deleted too early (this will be fixed)
148 149 - Probably there are lots of details that differ, I do not know PyQt that well to list them all.
149 150
150 151
151 152 \section Interface
152 153
153 154 The main interface to PythonQt is the PythonQt singleton.
154 155 PythonQt needs to be initialized via PythonQt::init() once.
155 156 Afterwards you communicate with the singleton via PythonQt::self().
156 157 PythonQt offers a complete Qt binding, which
157 158 needs to be enabled via PythonQt_QtAll::init().
158 159
159 160
160 161 \section Datatype Datatype Mapping
161 162
162 163 The following table shows the mapping between Python and Qt objects:
163 164 <table>
164 165 <tr><th>Qt/C++</th><th>Python</th></tr>
165 166 <tr><td>bool</td><td>bool</td></tr>
166 167 <tr><td>double</td><td>float</td></tr>
167 168 <tr><td>float</td><td>float</td></tr>
168 169 <tr><td>char/uchar,int/uint,short,ushort,QChar</td><td>integer</td></tr>
169 170 <tr><td>long</td><td>integer</td></tr>
170 171 <tr><td>ulong,longlong,ulonglong</td><td>long</td></tr>
171 172 <tr><td>QString</td><td>unicode string</td></tr>
172 173 <tr><td>QByteArray</td><td>str</td></tr>
173 174 <tr><td>char*</td><td>str</td></tr>
174 175 <tr><td>QStringList</td><td>tuple of unicode strings</td></tr>
175 176 <tr><td>QVariantList</td><td>tuple of objects</td></tr>
176 177 <tr><td>QVariantMap</td><td>dict of objects</td></tr>
177 178 <tr><td>QVariant</td><td>depends on type, see below</td></tr>
178 179 <tr><td>QSize, QRect and all other standard Qt QVariants</td><td>variant wrapper that supports complete API of the respective Qt classes</td></tr>
179 180 <tr><td>OwnRegisteredMetaType</td><td>C++ wrapper, optionally with additional information/wrapping provided by registerCPPClass()</td></tr>
180 181 <tr><td>QList<AnyObject*></td><td>converts to a list of CPP wrappers</td></tr>
181 182 <tr><td>EnumType</td><td>integer (all enums that are known via the moc and the Qt namespace are supported)</td></tr>
182 183 <tr><td>QObject (and derived classes)</td><td>QObject wrapper</td></tr>
183 184 <tr><td>C++ object</td><td>CPP wrapper, either wrapped via PythonQtCppWrapperFactory or just decorated with decorators</td></tr>
184 185 <tr><td>PyObject</td><td>PyObject</td></tr>
185 186 </table>
186 187
187 188 PyObject is passed as simple pointer, which allows to pass/return any Python Object directly to/from
188 189 a Qt slot.
189 190 QVariants are mapped recursively as given above, e.g. a dictionary can
190 191 contain lists of dictionaries of doubles.
191 192 For example a QVariant of type "String" is mapped to a python unicode string.
192 193 All Qt QVariant types are implemented, PythonQt supports the complete Qt API for these object.
193 194
194 195 \section QObject QObject Wrapping
195 196
196 197 All classes derived from QObject are automatically wrapped with a python wrapper class
197 198 when they become visible to the Python interpreter. This can happen via
198 199 - the PythonQt::addObject() method
199 200 - when a Qt \b slot returns a QObject derived object to python
200 201 - when a Qt \b signal contains a QObject and is connected to a python function
201 202
202 203 It is important that you call PythonQt::registerClass() for any QObject derived class
203 204 that may become visible to Python, except when you add it via PythonQt::addObject().
204 205 This will register the complete parent hierachy of the registered class, so that
205 206 when you register e.g. a QPushButton, QWidget will be registered as well (and all intermediate
206 207 parents).
207 208
208 209 From Python, you can talk to the returned QObjects in a natural way by calling
209 210 their slots and receiving the return values. You can also read/write all
210 211 properties of the objects as if they where normal python properties.
211 212
212 213 In addition to this, the wrapped objects support
213 214 - className() - returns a string that reprents the classname of the QObject
214 215 - help() - shows all properties, slots, enums, decorator slots and constructors of the object, in a printable form
215 216 - delete() - deletes the object (use with care, especially if you passed the ownership to C++)
216 217 - connect(signal, function) - connect the signal of the given object to a python function
217 218 - connect(signal, qobject, slot) - connect the signal of the given object to a slot of another QObject
218 219 - disconnect(signal, function) - disconnect the signal of the given object from a python function
219 220 - disconnect(signal, qobject, slot) - disconnect the signal of the given object from a slot of another QObject
220 221 - children() - returns the children of the object
221 222 - setParent(QObject) - set the parent
222 223 - QObject* parent() - get the parent
223 224
224 225 The below example shows how to connect signals in Python:
225 226
226 227 \code
227 228 # define a signal handler function
228 229 def someFunction(flag):
229 230 print flag
230 231
231 232 # button1 is a QPushButton that has been added to Python via addObject()
232 233 # connect the clicked signal to a python function:
233 234 button1.connect("clicked(bool)", someFunction)
234 235
235 236 \endcode
236 237
237 238 \section CPP CPP Wrapping
238 239
239 240 You can create dedicated wrapper QObjects for any C++ class. This is done by deriving from PythonQtCppWrapperFactory
240 241 and adding your factory via addWrapperFactory().
241 242 Whenever PythonQt encounters a CPP pointer (e.g. on a slot or signal)
242 243 and it does not known it as a QObject derived class, it will create a generic CPP wrapper. So even unknown C++ objects
243 244 can be passed through Python. If the wrapper factory supports the CPP class, a QObject wrapper will be created for each
244 245 instance that enters Python. An alternative to a complete wrapper via the wrapper factory are decorators, see \ref Decorators
245 246
246 247 \section MetaObject Meta Object/Class access
247 248
248 249 For each known C++ class, PythonQt provides a Python class. These classes are visible
249 250 inside of the "PythonQt" python module or in subpackages if a package is given when the class is registered.
250 251
251 252 A Meta class supports:
252 253
253 254 - access to all declared enum values
254 255 - constructors
255 256 - static methods
256 257 - unbound non-static methods
257 258 - help() and className()
258 259
259 260 From within Python, you can import the module "PythonQt" to access these classes and the Qt namespace.
260 261
261 262 \code
262 263 from PythonQt import QtCore
263 264
264 265 # namespace access:
265 266 print QtCore.Qt.AlignLeft
266 267
267 268 # constructors
268 269 a = QtCore.QSize(12,13)
269 270 b = QtCore.QFont()
270 271
271 272 # static method
272 273 QtCore.QDate.currentDate()
273 274
274 275 # enum value
275 276 QtCore.QFont.UltraCondensed
276 277
277 278 \endcode
278 279
279 280 \section Decorators Decorator slots
280 281
281 282 PythonQt introduces a new generic approach to extend any wrapped QObject or CPP object with
282 283
283 284 - constructors
284 285 - destructors (for CPP objects)
285 286 - additional slots
286 287 - static slots (callable on both the Meta object and the instances)
287 288
288 289 The idea behind decorators is that we wanted to make it as easy as possible to extend
289 290 wrapped objects. Since we already have an implementation for invoking any Qt Slot from
290 291 Python, it looked promising to use this approach for the extension of wrapped objects as well.
291 292 This avoids that the PythonQt user needs to care about how Python arguments are mapped from/to
292 293 Qt when he wants to create static methods, constructors and additional member functions.
293 294
294 295 The basic idea about decorators is to create a QObject derived class that implements slots
295 296 which take one of the above roles (e.g. constructor, destructor etc.) via a naming convention.
296 297 These slots are then assigned to other classes via the naming convention.
297 298
298 299 - SomeClassName* new_SomeClassName(...) - defines a constructor for "SomeClassName" that returns a new object of type SomeClassName (where SomeClassName can be any CPP class, not just QObject classes)
299 300 - void delete_SomeClassName(SomeClassName* o) - defines a destructor, which should delete the passed in object o
300 301 - anything static_SomeClassName_someMethodName(...) - defines a static method that is callable on instances and the meta class
301 302 - anything someMethodName(SomeClassName* o, ...) - defines a slot that will be available on SomeClassName instances (and derived instances). When such a slot is called the first argument is the pointer to the instance and the rest of the arguments can be used to make a call on the instance.
302 303
303 304 The below example shows all kinds of decorators in action:
304 305
305 306 \code
306 307
307 308 // an example CPP object
308 309 class YourCPPObject {
309 310 public:
310 311 YourCPPObject(int arg1, float arg2) { a = arg1; b = arg2; }
311 312
312 313 float doSomething(int arg1) { return arg1*a*b; };
313 314
314 315 private:
315 316
316 317 int a;
317 318 float b;
318 319 };
319 320
320 321 // an example decorator
321 322 class ExampleDecorator : public QObject
322 323 {
323 324 Q_OBJECT
324 325
325 326 public slots:
326 327 // add a constructor to QSize that takes a QPoint
327 328 QSize* new_QSize(const QPoint& p) { return new QSize(p.x(), p.y()); }
328 329
329 330 // add a constructor for QPushButton that takes a text and a parent widget
330 331 QPushButton* new_QPushButton(const QString& text, QWidget* parent=NULL) { return new QPushButton(text, parent); }
331 332
332 333 // add a constructor for a CPP object
333 334 YourCPPObject* new_YourCPPObject(int arg1, float arg2) { return new YourCPPObject(arg1, arg2); }
334 335
335 336 // add a destructor for a CPP object
336 337 void delete_YourCPPObject(YourCPPObject* obj) { delete obj; }
337 338
338 339 // add a static method to QWidget
339 340 QWidget* static_QWidget_mouseGrabber() { return QWidget::mouseGrabber(); }
340 341
341 342 // add an additional slot to QWidget (make move() callable, which is not declared as a slot in QWidget)
342 343 void move(QWidget* w, const QPoint& p) { w->move(p); }
343 344
344 345 // add an additional slot to QWidget, overloading the above move method
345 346 void move(QWidget* w, int x, int y) { w->move(x,y); }
346 347
347 348 // add a method to your own CPP object
348 349 int doSomething(YourCPPObject* obj, int arg1) { return obj->doSomething(arg1); }
349 350 };
350 351
351 352 ...
352 353
353 354 PythonQt::self()->addDecorators(new ExampleDecorator());
354 355 PythonQt::self()->registerCPPClass("YourCPPObject");
355 356
356 357 \endcode
357 358
358 359 After you have registered an instance of the above ExampleDecorator, you can do the following from Python
359 360 (all these calls are mapped to the above decorator slots):
360 361
361 362 \code
362 363 from PythonQt import QtCore, QtGui, YourCPPObject
363 364
364 365 # call our new constructor of QSize
365 366 size = QtCore.QSize(QPoint(1,2));
366 367
367 368 # call our new QPushButton constructor
368 369 button = QtGui.QPushButton("sometext");
369 370
370 371 # call the move slot (overload1)
371 372 button.move(QPoint(0,0))
372 373
373 374 # call the move slot (overload2)
374 375 button.move(0,0)
375 376
376 377 # call the static method
377 378 grabber = QtGui.QWidget.mouseWrapper();
378 379
379 380 # create a CPP object via constructor
380 381 yourCpp = YourCPPObject(1,11.5)
381 382
382 383 # call the wrapped method on CPP object
383 384 print yourCpp.doSomething(1);
384 385
385 386 # destructor will be called:
386 387 yourCpp = None
387 388
388 389 \endcode
389 390
390 391 \section Building
391 392
392 393 PythonQt requires at least Qt 4.2.2 (or higher) and Python 2.3, 2.4, 2.5 or 2.6 on Windows, Linux and MacOS X. It has not yet been tested with Python 3.x, but it should only require minor changes.
393 394 To compile PythonQt, you will need a python developer installation which includes Python's header files and
394 395 the python2x.[lib | dll | so | dynlib].
395 396 The build scripts a currently set to use Python 2.5.
396 397 You may need to tweak the \b build/python.prf file to set the correct Python includes and libs on your system.
397 398
398 399 \subsection Windows
399 400
400 401 On Windows, the (non-source) Python Windows installer can be used.
401 402 Make sure that you use the same compiler, the current Python distribution is built
402 403 with Visual Studio 2003. If you want to use another compiler, you will need to build
403 404 Python yourself, using your compiler.
404 405
405 406 To build PythonQt, you need to set the environment variable \b PYTHON_PATH to point to the root
406 407 dir of the python installation and \b PYTHON_LIB to point to
407 408 the directory where the python lib file is located.
408 409
409 410 When using the prebuild Python installer, this will be:
410 411
411 412 \code
412 413 > set PYTHON_PATH = c:\Python25
413 414 > set PYTHON_LIB = c:\Python25\libs
414 415 \endcode
415 416
416 417 When using the python sources, this will be something like:
417 418
418 419 \code
419 420 > set PYTHON_PATH = c:\yourDir\Python-2.5.1\
420 421 > set PYTHON_LIB = c:\yourDir\Python-2.5.1\PCbuild8\Win32
421 422 \endcode
422 423
423 424 To build all, do the following (after setting the above variables):
424 425
425 426 \code
426 427 > cd PythonQtRoot
427 428 > vcvars32
428 429 > qmake
429 430 > nmake
430 431 \endcode
431 432
432 433 This should build everything. If Python can not be linked or include files can not be found,
433 434 you probably need to tweak \b build/python.prf
434 435
435 436 The tests and examples are located in PythonQt/lib.
436 437
437 438 \subsection Linux
438 439
439 440 On Linux, you need to install a Python-dev package.
440 441 If Python can not be linked or include files can not be found,
441 442 you probably need to tweak \b build/python.prf
442 443
443 444 To build PythonQt, just do a:
444 445
445 446 \code
446 447 > cd PythonQtRoot
447 448 > qmake
448 449 > make all
449 450 \endcode
450 451
451 452 The tests and examples are located in PythonQt/lib.
452 453 You should add PythonQt/lib to your LD_LIBRARY_PATH so that the runtime
453 454 linker can find the *.so files.
454 455
455 456 \subsection MacOsX
456 457
457 458 On Mac, Python is installed as a Framework, so you should not need to install it.
458 459 To build PythonQt, just do a:
459 460
460 461 \code
461 462 > cd PythonQtRoot
462 463 > qmake
463 464 > make all
464 465 \endcode
465 466
466 467 \section Tests
467 468
468 469 There is a unit test that tests most features of PythonQt, see the \b tests subdirectory for details.
469 470
470 471 \section Examples
471 472
472 473 Examples are available in the \b examples directory. The PyScriptingConsole implements a simple
473 474 interactive scripting console that shows how to script a simple application.
474 475
475 476 The following shows how to integrate PythonQt into you Qt application:
476 477
477 478 \code
478 479 #include "PythonQt.h"
479 480 #include <QApplication>
480 481 ...
481 482
482 483 int main( int argc, char **argv )
483 484 {
484 485
485 486 QApplication qapp(argc, argv);
486 487
487 488 // init PythonQt and Python itself
488 489 PythonQt::init(PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut);
489 490
490 491
491 492 // get a smart pointer to the __main__ module of the Python interpreter
492 493 PythonQtObjectPtr mainContext = PythonQt::self()->getMainModule();
493 494
494 495 // add a QObject as variable of name "example" to the namespace of the __main__ module
495 496 PyExampleObject example;
496 497 PythonQt::self()->addObject(mainContext, "example", &example);
497 498
498 499 // do something
499 500 PythonQt::self()->runScript(mainContext, "print example\n");
500 501 PythonQt::self()->runScript(mainContext, "def multiply(a,b):\n return a*b;\n");
501 502 QVariantList args;
502 503 args << 42 << 47;
503 504 QVariant result = PythonQt::self()->call(mainContext,"multiply", args);
504 505 ...
505 506 \endcode
506 507
507 508
508 509 */
@@ -1,76 +1,79
1 1 #ifndef _PYTHONQTSTDDECORATORS_H
2 2 #define _PYTHONQTSTDDECORATORS_H
3 3
4 4 /*
5 5 *
6 6 * Copyright (C) 2006 MeVis Research GmbH All Rights Reserved.
7 7 *
8 8 * This library is free software; you can redistribute it and/or
9 9 * modify it under the terms of the GNU Lesser General Public
10 10 * License as published by the Free Software Foundation; either
11 11 * version 2.1 of the License, or (at your option) any later version.
12 12 *
13 13 * This library is distributed in the hope that it will be useful,
14 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 16 * Lesser General Public License for more details.
17 17 *
18 18 * Further, this software is distributed without any warranty that it is
19 19 * free of the rightful claim of any third person regarding infringement
20 20 * or the like. Any license provided herein, whether implied or
21 21 * otherwise, applies only to this software file. Patent licenses, if
22 22 * any, provided herein do not apply to combinations of this program with
23 23 * other software, or any other product whatsoever.
24 24 *
25 25 * You should have received a copy of the GNU Lesser General Public
26 26 * License along with this library; if not, write to the Free Software
27 27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 28 *
29 29 * Contact information: MeVis Research GmbH, Universitaetsallee 29,
30 30 * 28359 Bremen, Germany or:
31 31 *
32 32 * http://www.mevis.de
33 33 *
34 34 */
35 35
36 36 //----------------------------------------------------------------------------------
37 37 /*!
38 38 // \file PythonQtStdDecorators.h
39 39 // \author Florian Link
40 40 // \author Last changed by $Author: florian $
41 41 // \date 2007-04
42 42 */
43 43 //----------------------------------------------------------------------------------
44 44
45 45 #include "PythonQtSystem.h"
46 46 #include <Python.h>
47 47 #include <QObject>
48 48 #include <QVariantList>
49 49 #include <QTextDocument>
50 50 #include <QColor>
51 51 #include <QDateTime>
52 52 #include <QDate>
53 53 #include <QTime>
54 54
55 55 class PYTHONQT_EXPORT PythonQtStdDecorators : public QObject
56 56 {
57 57 Q_OBJECT
58 58
59 59 public slots:
60 60 bool connect(QObject* sender, const QByteArray& signal, PyObject* callable);
61 61 bool connect(QObject* sender, const QByteArray& signal, QObject* receiver, const QByteArray& slot);
62 62 bool disconnect(QObject* sender, const QByteArray& signal, PyObject* callable);
63 63 bool disconnect(QObject* sender, const QByteArray& signal, QObject* receiver, const QByteArray& slot);
64 64
65 bool static_QObject_connect(QObject* sender, const QByteArray& signal, PyObject* callable) { return connect(sender, signal, callable); }
66 bool static_QObject_connect(QObject* sender, const QByteArray& signal, QObject* receiver, const QByteArray& slot) { return connect(sender, signal, receiver, slot); }
67 bool static_QObject_disconnect(QObject* sender, const QByteArray& signal, PyObject* callable) { return disconnect(sender, signal, callable); }
68 bool static_QObject_disconnect(QObject* sender, const QByteArray& signal, QObject* receiver, const QByteArray& slot) { return disconnect(sender, signal, receiver, slot); };
69
65 70 QObject* parent(QObject* o);
66 71 void setParent(QObject* o, QObject* parent);
67 72
68 73 QVariantList children(QObject* o);
69 74
70 QString static_Qt_escape(const QString& s) { return Qt::escape(s); }
71
72 75 //TODO: add findChild/findChildren/children/...
73 76 };
74 77
75 78
76 79 #endif
General Comments 0
You need to be logged in to leave comments. Login now