From pykde Fri Apr 18 11:56:59 2008 From: Phil Thompson Date: Fri, 18 Apr 2008 11:56:59 +0000 To: pykde Subject: Re: [PyQt] Construct QVariant from object of user type Message-Id: <200804181256.59383.phil () riverbankcomputing ! co ! uk> X-MARC-Message: https://marc.info/?l=pykde&m=120852037805187 On Friday 18 April 2008, Arve Knudsen wrote: > On 4/17/08, Arve Knudsen wrote: > > On 4/17/08, Matt Newell wrote: > > > On Wednesday 16 April 2008 14:18:26 Arve Knudsen wrote: > > > > On Wed, Apr 16, 2008 at 11:33 AM, Phil Thompson > > > > > > > > wrote: > > > > > On Wednesday 16 April 2008, Arve Knudsen wrote: > > > > > > Phil, any comment on this? > > > > > > > > > > > > Thanks, > > > > > > Arve > > > > > > > > > > Unless you can use the ctor that takes a void* I don't see how > > > > > you can expect to extend the functionality of a C++ class from > > > > > Python. > > > > > > > > How am I supposed to use the QVariant(int typeOrUserType, const > > > > void* copy) constructor from Python? The documentation refers to > > > > sip.voidptr, which I know nothing about, and to use > > > > qVariantFromValue which isn't defined. > > > > > > > > I need to store objects of a custom class in QVariants, with a > > > > certain type code (QVariant::Type). The reason I need to do this is > > > > that QItemEditorFactory is parameterized on QVariant::Type. > > > > > > > > Arve > > > > > > If you look at qmetatype.h, you'll see that it should be possible to > > > create a mechanism to register custom python classes as QVariant > > > types. You just need to implement Constructor/Destructor methods that > > > call Py_INCREF/Py_DECREF. Then for each custom python type call > > > QMetaType::registerType(...). This would need to be implemented in > > > c++ with a python interface. > > > > > > You could then write a custom QVariant constructor that detects if > > > the python object's type is registered, and automatically call the > > > QVariant(int type,void*) ctor, or throws an exception for > > > non-registered types. > > > > So I would *have to* do this in C++? Ugh. > > Phil: Can you confirm that I have to do this via C++? I thought I already had in the above. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt