@@ -293,13 +293,14 void PythonQtPrivate::registerClass(const QMetaObject* metaobject, const char* p | |||
|
293 | 293 | PythonQtClassInfo* PythonQtPrivate::createPythonQtClassInfo(const QMetaObject* meta, const char* cppClassName, const char* package) |
|
294 | 294 | { |
|
295 | 295 | PythonQtClassInfo* info = new PythonQtClassInfo(meta, cppClassName); |
|
296 |
Py |
|
|
296 | PyObject* pack = packageByName(package); | |
|
297 | 297 | PyObject* pyobj = (PyObject*)createNewPythonQtClassWrapper(info, package); |
|
298 | 298 | PyModule_AddObject(pack, meta?meta->className():cppClassName, pyobj); |
|
299 | 299 | if (package && strncmp(package,"Qt",2)==0) { |
|
300 | // since PyModule_AddObject steals the reference, we need a incref once more... | |
|
301 | Py_INCREF(pyobj); | |
|
300 | 302 | // put all qt objects into Qt as well |
|
301 | PythonQtObjectPtr pack = packageByName("Qt"); | |
|
302 | PyModule_AddObject(pack, meta?meta->className():cppClassName, pyobj); | |
|
303 | PyModule_AddObject(packageByName("Qt"), meta?meta->className():cppClassName, pyobj); | |
|
303 | 304 | } |
|
304 | 305 | info->setPythonQtClassWrapper(pyobj); |
|
305 | 306 | return info; |
@@ -474,8 +475,6 PythonQtClassWrapper* PythonQtPrivate::createNewPythonQtClassWrapper(PythonQtCla | |||
|
474 | 475 | Py_DECREF(args); |
|
475 | 476 | Py_DECREF(className); |
|
476 | 477 | |
|
477 | //TODO XXX why is this incref needed? It looks like the types get garbage collected somehow?! | |
|
478 | Py_INCREF((PyObject*)result); | |
|
479 | 478 | return result; |
|
480 | 479 | } |
|
481 | 480 | |
@@ -1016,7 +1015,7 static PyMethodDef PythonQtMethods[] = { | |||
|
1016 | 1015 | |
|
1017 | 1016 | void PythonQt::initPythonQtModule(bool redirectStdOut) |
|
1018 | 1017 | { |
|
1019 |
_p->_pythonQtModule |
|
|
1018 | _p->_pythonQtModule = Py_InitModule("PythonQt", PythonQtMethods); | |
|
1020 | 1019 | |
|
1021 | 1020 | if (redirectStdOut) { |
|
1022 | 1021 | PythonQtObjectPtr sys; |
@@ -1055,15 +1054,17 void PythonQtPrivate::registerCPPClass(const char* typeName, const char* parentT | |||
|
1055 | 1054 | } |
|
1056 | 1055 | } |
|
1057 | 1056 | |
|
1058 |
Py |
|
|
1057 | PyObject* PythonQtPrivate::packageByName(const char* name) | |
|
1059 | 1058 | { |
|
1060 | 1059 | if (name==NULL || name[0]==0) { |
|
1061 | 1060 | return _pythonQtModule; |
|
1062 | 1061 | } |
|
1063 |
Py |
|
|
1062 | PyObject* v = _packages.value(name); | |
|
1064 | 1063 | if (!v) { |
|
1065 |
v |
|
|
1064 | v = PyImport_AddModule((QByteArray("PythonQt.") + name).constData()); | |
|
1066 | 1065 | _packages.insert(name, v); |
|
1066 | // AddObject steals the reference, so increment it! | |
|
1067 | Py_INCREF(v); | |
|
1067 | 1068 | PyModule_AddObject(_pythonQtModule, name, v); |
|
1068 | 1069 | } |
|
1069 | 1070 | return v; |
@@ -451,8 +451,8 private: | |||
|
451 | 451 | //! create a new class info and python wrapper type |
|
452 | 452 | PythonQtClassInfo* createPythonQtClassInfo(const QMetaObject* meta, const char* cppClassName, const char* package); |
|
453 | 453 | |
|
454 | //! get/create new package module | |
|
455 |
Py |
|
|
454 | //! get/create new package module (the returned object is a borrowed reference) | |
|
455 | PyObject* packageByName(const char* name); | |
|
456 | 456 | |
|
457 | 457 | //! get the wrapper for a given pointer (and remove a wrapper of an already destroyed qobject) |
|
458 | 458 | PythonQtInstanceWrapper* findWrapperAndRemoveUnused(void* obj); |
@@ -495,7 +495,7 private: | |||
|
495 | 495 | QHash<QByteArray , PythonQtSlotInfo *> _constructorSlots; |
|
496 | 496 | QHash<QByteArray , PythonQtSlotInfo *> _destructorSlots; |
|
497 | 497 | |
|
498 |
QHash<QByteArray, Py |
|
|
498 | QHash<QByteArray, PyObject*> _packages; | |
|
499 | 499 | |
|
500 | 500 | PythonQtClassInfo* _currentClassInfoForClassWrapperCreation; |
|
501 | 501 |
General Comments 0
You need to be logged in to leave comments.
Login now