[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