@@ -95,7 +95,7 @@ PyObject* PythonQtConv::ConvertQtValueToPython(const PythonQtMethodInfo::Paramet
9595 listPtr = (QList<void *>*)data;
9696 }
9797 if (listPtr) {
98- return ConvertQListOfPointerTypeToPythonList (listPtr, info. innerName );
98+ return ConvertQListOfPointerTypeToPythonList (listPtr, info);
9999 } else {
100100 return NULL ;
101101 }
@@ -656,7 +656,7 @@ void* PythonQtConv::ConvertPythonToQt(const PythonQtMethodInfo::ParameterInfo& i
656656 } else {
657657 ptr = alreadyAllocatedCPPObject;
658658 }
659- ok = ConvertPythonListToQListOfPointerType (obj, (QList<void *>*)ptr, info. innerName , strict);
659+ ok = ConvertPythonListToQListOfPointerType (obj, (QList<void *>*)ptr, info, strict);
660660 if (ok) {
661661 return ptr;
662662 } else {
@@ -1189,7 +1189,7 @@ QVariant PythonQtConv::PyObjToQVariant(PyObject* val, int type)
11891189 if (info.isQList && (info.innerNamePointerCount == 1 )) {
11901190 // allocate a default object of the needed type:
11911191 v = QVariant (type, (const void *)NULL );
1192- ok = ConvertPythonListToQListOfPointerType (val, (QList<void *>*)v.constData (), info. innerName , true );
1192+ ok = ConvertPythonListToQListOfPointerType (val, (QList<void *>*)v.constData (), info, true );
11931193 if (!ok) {
11941194 v = QVariant ();
11951195 }
@@ -1290,18 +1290,27 @@ PyObject* PythonQtConv::QVariantListToPyObject(const QVariantList& l) {
12901290 return result;
12911291}
12921292
1293- PyObject* PythonQtConv::ConvertQListOfPointerTypeToPythonList (QList<void *>* list, const QByteArray& typeName )
1293+ PyObject* PythonQtConv::ConvertQListOfPointerTypeToPythonList (QList<void *>* list, const PythonQtMethodInfo::ParameterInfo& info )
12941294{
12951295 PyObject* result = PyTuple_New (list->count ());
12961296 int i = 0 ;
12971297 Q_FOREACH (void * value, *list) {
1298- PyTuple_SET_ITEM (result, i, PythonQt::priv ()->wrapPtr (value, typeName));
1298+ PyObject* wrap = PythonQt::priv ()->wrapPtr (value, info.innerName );
1299+ if (wrap) {
1300+ PythonQtInstanceWrapper* wrapper = (PythonQtInstanceWrapper*)wrap;
1301+ if (info.passOwnershipToCPP ) {
1302+ wrapper->passOwnershipToCPP ();
1303+ } else if (info.passOwnershipToPython ) {
1304+ wrapper->passOwnershipToPython ();
1305+ }
1306+ }
1307+ PyTuple_SET_ITEM (result, i, wrap);
12991308 i++;
13001309 }
13011310 return result;
13021311}
13031312
1304- bool PythonQtConv::ConvertPythonListToQListOfPointerType (PyObject* obj, QList<void *>* list, const QByteArray& type , bool /* strict*/ )
1313+ bool PythonQtConv::ConvertPythonListToQListOfPointerType (PyObject* obj, QList<void *>* list, const PythonQtMethodInfo::ParameterInfo& info , bool /* strict*/ )
13051314{
13061315 bool result = false ;
13071316 if (PySequence_Check (obj)) {
@@ -1314,9 +1323,16 @@ bool PythonQtConv::ConvertPythonListToQListOfPointerType(PyObject* obj, QList<vo
13141323 if (PyObject_TypeCheck (value, &PythonQtInstanceWrapper_Type)) {
13151324 PythonQtInstanceWrapper* wrap = (PythonQtInstanceWrapper*)value;
13161325 bool ok;
1317- void * object = castWrapperTo (wrap, type , ok);
1326+ void * object = castWrapperTo (wrap, info. innerName , ok);
13181327 Py_XDECREF (value);
13191328 if (ok) {
1329+ if (object) {
1330+ if (info.passOwnershipToCPP ) {
1331+ wrap->passOwnershipToCPP ();
1332+ } else if (info.passOwnershipToPython ) {
1333+ wrap->passOwnershipToPython ();
1334+ }
1335+ }
13201336 list->append (object);
13211337 } else {
13221338 result = false ;
0 commit comments