@@ -0,0 +1,37 | |||||
|
1 | ||||
|
2 | Version 1.1 ChangeLog: | |||
|
3 | ||||
|
4 | florianlink | 2007-11-15 08:38:24 -0800 (Thu, 15 Nov 2007) | |||
|
5 | - added support for mapping Python lists to QList<AnyPtr*> lists on slot calls | |||
|
6 | - added support for QList<AnyPtr*> return values and signal signatures | |||
|
7 | - changed binary output to lib as well, so that the setting of PATH can be avoided | |||
|
8 | - changed profiles to use a new common.prf to facilitate global settings | |||
|
9 | - improved docs | |||
|
10 | - added _d extension for debug build (see common.prf) | |||
|
11 | - added $$PWD, which is important if the file is included from somewhere else (which we do in mevis) | |||
|
12 | - added softspace support (implemented by Andre Kramer) | |||
|
13 | - updated windows documentation and variables which need to be set | |||
|
14 | - changed to use only PYTHON_PATH on Windows | |||
|
15 | - added more build docs | |||
|
16 | - changed date conversion from/to strings to ISODate | |||
|
17 | - fixed return argument initialization to NULL | |||
|
18 | - added mevis doc | |||
|
19 | - fixed handling of unknown reference types | |||
|
20 | - made lookupObject public | |||
|
21 | - added overload calls to introspection | |||
|
22 | ||||
|
23 | marcusbarann | 2007-11-08 06:15:55 -0800 (Thu, 08 Nov 2007) | |||
|
24 | - Added PythonQt.pro, cleaned up build system | |||
|
25 | ||||
|
26 | akramer | 2007-10-17 08:02:25 -0700 (Wed, 17 Oct 2007) | |||
|
27 | - external variant was missing the "config += qtestlib" needed for using the Qt unit test framework. | |||
|
28 | - provide relative path to Gui extension lib | |||
|
29 | - added a sentence about using the Windows installer version of Python | |||
|
30 | - Fix for converting QByteArray values that include 0 chars. | |||
|
31 | They are still converted to/from Python strings but using | |||
|
32 | size of contents rather than string 0 (null) termination. | |||
|
33 | - bug fix for getMTimeOfSource when PythonQt::importInterface() is null | |||
|
34 | - Linux external build improvements | |||
|
35 | ||||
|
36 | 2007-01-30 00:11:25 -0800 (Tue, 30 Jan 2007) | 1 line | |||
|
37 | - Released version 1.0 |
@@ -0,0 +1,34 | |||||
|
1 | #include <PythonQt.h> | |||
|
2 | #include <QtGui> | |||
|
3 | int main (int argc, char* argv[]) { | |||
|
4 | QApplication app(argc, argv); | |||
|
5 | PythonQt::init(); | |||
|
6 | PythonQtObjectPtr mainModule = PythonQt::self()->getMainModule(); | |||
|
7 | Q_ASSERT(!mainModule.isNull()); | |||
|
8 | { | |||
|
9 | // evaluate a python file embedded in executable as resource: | |||
|
10 | mainModule.evalFile(":eyed3tagger.py"); | |||
|
11 | PythonQtObjectPtr tag = mainModule.evalScript("EyeD3Tagger()\n", Py_eval_input); | |||
|
12 | Q_ASSERT(!tag.isNull()); | |||
|
13 | tag.call("setFileName", QVariantList() << "t.mp3"); | |||
|
14 | QVariant fn = tag.call("fileName", QVariantList()); | |||
|
15 | Q_ASSERT(fn.toString() == QString("t.mp3")); | |||
|
16 | } | |||
|
17 | qDebug() << "test1"; | |||
|
18 | { // alternative using import and loading it as a real module from sys.path | |||
|
19 | // import sys first | |||
|
20 | mainModule.evalScript(QString("import sys\n")); | |||
|
21 | // append the current directory to the sys.path | |||
|
22 | mainModule.evalScript(QString("sys.path.append('%1')\n").arg(QDir::currentPath())); | |||
|
23 | ||||
|
24 | mainModule.evalScript("import eyed3tagger\n"); | |||
|
25 | PythonQtObjectPtr tag = mainModule.evalScript("eyed3tagger.EyeD3Tagger()\n", Py_eval_input); | |||
|
26 | Q_ASSERT(!tag.isNull()); | |||
|
27 | tag.call("setFileName", QVariantList() << "t.mp3"); | |||
|
28 | QVariant fn = tag.call("fileName", QVariantList()); | |||
|
29 | Q_ASSERT(fn.toString() == QString("t.mp3")); | |||
|
30 | } | |||
|
31 | ||||
|
32 | qDebug() << "finished"; | |||
|
33 | return 0; | |||
|
34 | } |
@@ -0,0 +1,9 | |||||
|
1 | CONFIG += debug | |||
|
2 | VPATH += | |||
|
3 | INCLUDEPATH += . $$(PYTHONQT_ROOT)/src /usr/include/python2.5 | |||
|
4 | ||||
|
5 | SOURCES += CPPPyWrapperExample.cpp | |||
|
6 | ||||
|
7 | LIBS += -L$$(PYTHONQT_ROOT)/lib -lPythonQt -lutil | |||
|
8 | ||||
|
9 | RESOURCES += CPPPyWrapperExample.qrc |
@@ -0,0 +1,5 | |||||
|
1 | <RCC version="1.0"> | |||
|
2 | <qresource> | |||
|
3 | <file>eyed3tagger.py</file> | |||
|
4 | </qresource> | |||
|
5 | </RCC> |
@@ -0,0 +1,9 | |||||
|
1 | It also shows how to add user defined Python classes to the | |||
|
2 | embedded Python mainModule. | |||
|
3 | It also shows how to create objects in Python, | |||
|
4 | hold onto reference counted smart pointers to them from | |||
|
5 | a Qt application, and invoke methods on them via | |||
|
6 | the PythonQtObjectPtr interface. | |||
|
7 | ||||
|
8 | ||||
|
9 |
@@ -0,0 +1,10 | |||||
|
1 | class EyeD3Tagger(): | |||
|
2 | def __init__(self, fileName = None): | |||
|
3 | if not fileName is None: | |||
|
4 | self.setFileName(fileName) | |||
|
5 | ||||
|
6 | def fileName(self): | |||
|
7 | return self.fn | |||
|
8 | ||||
|
9 | def setFileName(self, fileName): | |||
|
10 | self.fn = fileName |
@@ -2,7 +2,7 PythonQt | |||||
2 | -------- |
|
2 | -------- | |
3 |
|
3 | |||
4 | PythonQt is a dynamic Python (http://www.python.org) binding for Qt (http://www.trolltech.com). |
|
4 | PythonQt is a dynamic Python (http://www.python.org) binding for Qt (http://www.trolltech.com). | |
5 |
It offers an easy way to embed |
|
5 | It offers an easy way to embed the Python scripting language into | |
6 | your Qt applications. It makes heavy use of the QMetaObject system and thus requires Qt4.x. |
|
6 | your Qt applications. It makes heavy use of the QMetaObject system and thus requires Qt4.x. | |
7 |
|
7 | |||
8 | Licensing |
|
8 | Licensing |
@@ -23,7 +23,7 PROJECT_NAME = PythonQt | |||||
23 | # This could be handy for archiving the generated documentation or |
|
23 | # This could be handy for archiving the generated documentation or | |
24 | # if some version control system is used. |
|
24 | # if some version control system is used. | |
25 |
|
25 | |||
26 |
PROJECT_NUMBER = 1. |
|
26 | PROJECT_NUMBER = 1.1 | |
27 |
|
27 | |||
28 | # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) |
|
28 | # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) | |
29 | # base path where the generated documentation will be put. |
|
29 | # base path where the generated documentation will be put. |
@@ -82,3 +82,15 QVariant PythonQtObjectPtr::call(const QString& callable, const QVariantList& ar | |||||
82 | return PythonQt::self()->call(_object, callable, args); |
|
82 | return PythonQt::self()->call(_object, callable, args); | |
83 | } |
|
83 | } | |
84 |
|
84 | |||
|
85 | bool PythonQtObjectPtr::fromVariant(const QVariant& variant) | |||
|
86 | { | |||
|
87 | if (!variant.isNull()) { | |||
|
88 | setObject(qVariantValue<PythonQtObjectPtr>(variant)); | |||
|
89 | return true; | |||
|
90 | } | |||
|
91 | else { | |||
|
92 | setObject(0); | |||
|
93 | return false; | |||
|
94 | } | |||
|
95 | ||||
|
96 | } |
@@ -55,6 +55,11 public: | |||||
55 | setObject(p.object()); |
|
55 | setObject(p.object()); | |
56 | } |
|
56 | } | |
57 |
|
57 | |||
|
58 | //! If the given variant holds a PythonQtObjectPtr, extract the value from it and hold onto the reference. This results in an increment of the reference count. | |||
|
59 | PythonQtObjectPtr(const QVariant& variant):_object(NULL) { | |||
|
60 | fromVariant(variant); | |||
|
61 | } | |||
|
62 | ||||
58 |
|
|
63 | PythonQtObjectPtr(PyObject* o) { | |
59 | _object = o; |
|
64 | _object = o; | |
60 | if (o) Py_INCREF(_object); |
|
65 | if (o) Py_INCREF(_object); | |
@@ -62,6 +67,9 public: | |||||
62 |
|
67 | |||
63 | ~PythonQtObjectPtr() { if (_object) Py_DECREF(_object); } |
|
68 | ~PythonQtObjectPtr() { if (_object) Py_DECREF(_object); } | |
64 |
|
69 | |||
|
70 | //! If the given variant holds a PythonQtObjectPtr, extract the value from it and hold onto the reference. This results in an increment of the reference count. | |||
|
71 | bool fromVariant(const QVariant& variant); | |||
|
72 | ||||
65 |
|
|
73 | PythonQtObjectPtr &operator=(const PythonQtObjectPtr &p) { | |
66 | setObject(p.object()); |
|
74 | setObject(p.object()); | |
67 | return *this; |
|
75 | return *this; | |
@@ -72,6 +80,13 public: | |||||
72 | return *this; |
|
80 | return *this; | |
73 | } |
|
81 | } | |
74 |
|
82 | |||
|
83 | ||||
|
84 | PythonQtObjectPtr &operator=(const QVariant& variant) { | |||
|
85 | fromVariant(variant); | |||
|
86 | return *this; | |||
|
87 | } | |||
|
88 | ||||
|
89 | ||||
75 |
|
|
90 | bool operator==( const PythonQtObjectPtr &p ) const { | |
76 | return object() == p.object(); |
|
91 | return object() == p.object(); | |
77 | } |
|
92 | } | |
@@ -134,6 +149,8 public: | |||||
134 | QVariant call(const QString& callable, const QVariantList& args); |
|
149 | QVariant call(const QString& callable, const QVariantList& args); | |
135 |
|
150 | |||
136 |
|
151 | |||
|
152 | ||||
|
153 | ||||
137 | protected: |
|
154 | protected: | |
138 |
|
155 | |||
139 | void setObject(PyObject* o) { |
|
156 | void setObject(PyObject* o) { |
General Comments 0
You need to be logged in to leave comments.
Login now