[PySide] manipulating >10 args?

Matthew Woehlke matthew.woehlke at kitware.com
Tue Jul 23 18:45:56 CEST 2013


On 2013-07-23 07:01, Dennis Victorovich wrote:
> I'm not sure if its possible to pass more than 10 arguments into call.
> 10 arguments constraints may come from QMetaObject::Invoke() limitations (
> http://qt-project.org/doc/qt-4.8/qmetaobject.html#invokeMethod)
> Take a look at cpp bindings code generated from your template. Shiboken may
> use QMetaObject::Invoke()

I'd expect it to be calling the code I gave it in <inject-code>:

%RETURN_TYPE retval_ =
   %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, %6,
                           %7, %8, %9, &ok_, %11);

...and it seems to be doing so:

double retval_ =
   qtDoubleInputDialog::getDouble(cppArg0, cppArg1, cppArg2, cppArg3,
                                  cppArg4, cppArg5, cppArg6, cppArg7,
                                  cppArg8, &ok_, cppArg9);

(line re-wrapped for readability in e-mail)

There is no 'invoke' (case-insensitive search) anywhere in the generated 
code for this class.

There may be cases where that is a real limit (FWIW I'll also point out 
that this particular method is a static class method and - as such, 
AFAIK - couldn't be called with QMetaObject::invokeMethod anyway), but 
in general I would say shiboken ought to handle more than nine args. And 
it seems the only problem is that the '%#' substitution doesn't check 
for whole words (or operate from highest-number to lowest), such that 
'%10', etc. ends up replaced as '%1' with a leftover digit.

So an easy and obvious fix is to ensure that '%1' is only replaced if it 
is not followed by another digit, for which using a regex ending in '\b' 
suffices.

-- 
Matthew




More information about the PySide mailing list