[Qt-interest] boost types in methods called from QtScript
RZ
rz at razfazz.at
Thu Feb 18 23:56:03 CET 2010
Hi,
that's what I feared. Although I hoped that QVariant can be "extended"
with one of that various qRegisterMetatype, qScriptRegisterMetatype, ..
(by also providing my own conversion functions from/to uint32) which I
didn't succeed in.
Very sad that there is no possibilty because now I have to wrap each
invokable function and doing the conversion there.
Thx anyway,
RZ
> Hi RZ,
>
> My guess is that, sadly, there is little you can do appart from changing
> your prototype from "uint32" to "uint" or "quint32". This is because
> when you call a method of your class from QtScript, Qt looks up the
> method in its list of slots and methods marked Q_INVOKABLE, and tries to
> find one with the same prototype. Problem is, when you have a method
> with a prototype of :
>
> SetStartParameters(uint32 a, uint16 b)
>
> Qt knows nothing of "uint32" and "uint16", and thus when it does a
> lookup, it doesn't know if the number it got from QtScript (here 'i')
> can be converted into a 'uint32'. It knows it can convert to "quint16",
> "quint32", "double", "uint", "int" and a bunch of others, but that's
> because the conversion relationships are hardcoded into qvariant.cpp in
> Qt's source code.
>
> In your case, from Qt's point of view, "uint32" could be anything, even
> a non POD type. So it doesn't take chances, and deems the types are
> incompatible, hence the TypeError.
>
> Florian
>
>
> RZ a écrit :
>> Hello all,
>>
>> I managed to get my C++ (QObject derived) class invokable from QtScript.
>> So I can do in QtScript:
>>
>> var myClass = new MyClass();
>>
>> Unfortunately this C++ base class uses boost::uint32_t, boost::uint16_t,
>> ... (and then typedef boost::uint32_t uint32, ..). So a method inside my
>> class is:
>>
>> SetStartParameters(uint32 a, uint16 b)
>>
>> I can do
>>
>> myClass.SetStartParameters(1, 2);
>>
>> but whatever I try if I want to use var's instead like
>>
>> var i = 2;
>> myClass.SetStartParameters(1, i);
>>
>> I always get a "TypeError" (because i is no uint16); interestingly it
>> works if I construct an overloaded method using Qt's types
>>
>> SetStartParameters(quint32 a, quint16 b);
>>
>> I tried things like Q_DECLARE_METATYPE(uint32),
>> qRegisterMetaType<uint32>("uint32"), qScriptRegisterMetaType (where I
>> don't know if I passed all parameters correctly).
>>
>> Can anybody help what to do to get uint32 to work?
>>
>> Thx,
>>
>> RZ
>>
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list