[PyQt] QVariant bug(?)
phil at riverbankcomputing.com
Wed Sep 3 09:13:12 BST 2008
On Wed, 3 Sep 2008 08:07:25 +0200, "Arve Knudsen" <arve.knudsen at gmail.com>
> On Tue, Sep 2, 2008 at 11:15 PM, Phil Thompson
> <phil at riverbankcomputing.com> wrote:
>> On Tue, 2 Sep 2008 22:12:54 +0200, "Arve Knudsen"
> <arve.knudsen at gmail.com>
>>> On Tue, Sep 2, 2008 at 4:04 PM, Phil Thompson
>>> <phil at riverbankcomputing.com> wrote:
>>>> On Tue, 2 Sep 2008 11:29:00 +0200, "Arve Knudsen"
>>> <arve.knudsen at gmail.com>
>>>>> I have created a simple test case which triggers a likely bug in
>>>>> As the case demonstrates, I have a class template "PropertyValue"
>>>>> which I wrap and use with QVariant. When I run the test program
>>>>> ("tst.py") however, there is a segfault in the PropertyValue copy
>>>>> constructor. The reason as far as I've been able to tell is that PyQt
>>>>> doesn't register its own metatype for "StringValue"
>>>>> (PropertyValue<QString>), since this is already constructed for the
>>>>> C++ type (see qobject.sip, line 1479), with chaotic results (the C++
>>>>> copy constructor receives a raw PyObject for the right-hand-side
>>>> The bug should be fixed in tonight's PyQt snapshot.
>>>> However, it leaves the question as to how you would get the instance
>>>> out of the QVariant. QVariant.toPyObject() only handles Python objects
>>>> the moment - not wrapped non-Qt C++ instances as you have.
>>>> I think I need to add an optional type argument to toPyObject(), eg...
>>>> my_string_value = variant.toPyObject(StringValue)
>>> I don't understand what you mean here. QVariant.toPyObject currently
>>> works with StringValue objects?
>> No, and it still won't after the bug is fixed - but there needs to be
>> way to convert the C++ instance to a Python object (ie. to do the
>> of what your test case does).
> Well, I'm confused, since I patched PyQt myself, and calling
> toPyObject() on the QVariant in my case returns the expected
> StringValue object.
Obviously I can't comment on the behaviour of your patched version.
> Are you talking about a different case, i.e.
> dealing with a QVariant created in C++ (and containing a C++ object)?
That's one use case that will work after tonight's snapshots.
More information about the PyQt