[PyQt] QVariant bug(?)

Arve Knudsen arve.knudsen at gmail.com
Wed Sep 3 07:07:25 BST 2008


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>
> wrote:
>> 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>
>>> wrote:
>>>> I have created a simple test case which triggers a likely bug in PyQt.
>>>> 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
>>>> argument).
>>>
>>> The bug should be fixed in tonight's PyQt snapshot.
>>>
>>> However, it leaves the question as to how you would get the instance
>> back
>>> out of the QVariant. QVariant.toPyObject() only handles Python objects
>> at
>>> 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 some
> way to convert the C++ instance to a Python object (ie. to do the reverse
> 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. Are you talking about a different case, i.e.
dealing with a QVariant created in C++ (and containing a C++ object)?

Arve


More information about the PyQt mailing list