[PyQt] QVariant TypeError on python class, but not on Qt class

Phil Thompson phil at riverbankcomputing.co.uk
Wed Apr 4 14:25:38 BST 2007


On Wednesday 04 April 2007 2:17 pm, Drew Vogel wrote:
> Phil Thompson wrote:
> > On Wednesday 04 April 2007 3:01 am, Drew Vogel wrote:
> >> Consider this listing:
> >>
> >>    1.
> >>       from PyQt4 import QtCore
> >>    2.
> >>       from PyQt4 import QtGui
> >>    3.
> >>
> >>    4.
> >>
> >>    5.
> >>       # This works
> >>    6.
> >>       i = QtGui.QIcon()
> >>    7.
> >>       qi = QtCore.QVariant(i)
> >>    8.
> >>
> >>    9.
> >>
> >>   10.
> >>       # This throws TypeError: argument 1 of QVariant() has invalid type
> >>   11.
> >>       class C:
> >>   12.
> >>               def __init__(self, v):
> >>   13.
> >>                       self.value = v
> >>   14.
> >>
> >>   15.
> >>       x = C(100)
> >>   16.
> >>       qx = QtCore.QVariant(x)
> >>
> >>
> >> Why does line 16 throw TypeError, but line 7 does not? I suspect that it
> >> has something to do with "x" being a python class and "i" being a Qt
> >> class, but I don't see anything in the QVariant documentation mentioning
> >> a difference. Is this supposed to be supported?
> >
> > QVariant can only handle types it knows about (nothing to do with whether
> > they are Qt classes). It knows nothing about C.
> >
> > Phil
> > _______________________________________________
> > PyQt mailing list    PyQt at riverbankcomputing.com
> > http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>
> Is there any way to tell QVariant about my C class? In C++ I did this
> with the Q_DECLARE_METATYPE macro and qRegisterMetaType(). The PyQt4
> QVariant documentation[1] links to the QMetaType documentation[2], but
> the link is dead. I couldn't find the equivilent through trial and error
> so I suspected that PyQt didn't need to register meta types because it
> used Python's introspection features.
>
> [1] http://www.riverbankcomputing.com/Docs/PyQt4/html/qvariant.html
> [2] http://www.riverbankcomputing.com/Docs/PyQt4/html/qmetatype.html

It's not possible.

Phil


More information about the PyQt mailing list