On Wednesday 16 April 2008 14:18:26 Arve Knudsen wrote: > On Wed, Apr 16, 2008 at 11:33 AM, Phil Thompson > > <[EMAIL PROTECTED]> 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. BTW, you don't really have to use QItemEditorFactory. You can use a custom delegate. Of course you still have to return the data as a QVariant unless you go around the QModelIndex::data function, but that would probably tie the delegate to the model, which might defeat the purpose. Matt _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
