diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2010-12-01 18:09:09 -0200 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:47:55 -0300 |
commit | 9edc8a3834c9ba067b255b9996d59a473df6ef18 (patch) | |
tree | 7e12ce1e9fe804241d93382f5c50762f1d0085d2 /libpyside/pysidemetafunction.cpp | |
parent | ec7b01c24f903925494fe21cc08b5c5111435daa (diff) |
Fixed qt_metacall, now everything works as it should.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Lauro Moura <lauro.neto@openbossa.org>
Diffstat (limited to 'libpyside/pysidemetafunction.cpp')
-rw-r--r-- | libpyside/pysidemetafunction.cpp | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/libpyside/pysidemetafunction.cpp b/libpyside/pysidemetafunction.cpp index bcccbb82a..bee793cc6 100644 --- a/libpyside/pysidemetafunction.cpp +++ b/libpyside/pysidemetafunction.cpp @@ -98,29 +98,26 @@ void functionFree(void *self) PyObject* functionCall(PyObject* self, PyObject* args, PyObject* kw) { + static Shiboken::TypeResolver* typeResolver = Shiboken::TypeResolver::get("QVariant"); + Q_ASSERT(typeResolver); + QGenericArgument gArgs[10]; + QVariant vArgs[10]; PySideMetaFunction* function = reinterpret_cast<PySideMetaFunction*>(self); - QList<QVariant*> vArgs; QMetaMethod method = function->d->method; - QList<QByteArray> pTypes = method.parameterTypes(); - int numArgs = pTypes.size(); + int argsGiven = method.parameterTypes().size(); - Shiboken::TypeResolver* typeResolver = Shiboken::TypeResolver::get("QVariant"); - Q_ASSERT(typeResolver); - for(int i=0; i < numArgs; i++) { - QVariant *vArg; + for (int i = 0; i < argsGiven; ++i) { Shiboken::AutoDecRef pyArg(PySequence_GetItem(args, i)); - typeResolver->toCpp(pyArg, (void**)&vArg, true); - vArgs.append(vArg); - gArgs[i] = Q_ARG(QVariant, *vArg); + gArgs[i] = Q_ARG(QVariant, vArgs[i]); + void* v[1] = { &vArgs[i] }; + typeResolver->toCpp(pyArg, v); } QVariant retVariant; QGenericReturnArgument returnValue = Q_RETURN_ARG(QVariant, retVariant); method.invoke(function->d->qobject, returnValue, gArgs[0], gArgs[1], gArgs[2], gArgs[3], gArgs[4], gArgs[5], gArgs[6], gArgs[7], gArgs[8], gArgs[9]); - while(!vArgs.isEmpty()) - delete vArgs.takeFirst(); if (retVariant.isValid()) return typeResolver->toPython(&retVariant); |