[PyQt] PyQt4 question

Detlev Offenbach detlev at die-offenbachs.de
Sun May 27 11:50:31 BST 2007


On Sonntag, 27. Mai 2007, Phil Thompson wrote:
> On Saturday 26 May 2007 9:07 pm, Detlev Offenbach wrote:
> > On Samstag, 26. Mai 2007, Phil Thompson wrote:
> > > On Saturday 26 May 2007 7:58 pm, Detlev Offenbach wrote:
> > > > On Samstag, 26. Mai 2007, Phil Thompson wrote:
> > > > > On Saturday 26 May 2007 4:52 pm, Detlev Offenbach wrote:
> > > > > > Hi,
> > > > > >
> > > > > > is there a PyQt equivalent to "qobject_cast<T*>(object)"?
> > > > >
> > > > > sip.cast()?
> > > > >
> > > > > But it shouldn't be necessary if the sub-class conversion code has
> > > > > been properly implemented.
> > > >
> > > > How do I do that. I haven't wrapped complicated stuff like this so
> > > > far. The situation is as follows. I have the following code:
> > > >
> > > >        
> > > > self.plugins.extend(self.designer.pluginManager().instances()) for
> > > > plugin in self.plugins:
> > > >             if isinstance(plugin,
> > > > QDesignerFormEditorPluginInterface): if not plugin.isInitialized():
> > > >                     plugin.initialze(self.designer)
> > > >
> > > >
> > > > "self.designer.pluginManager().instances()" returns a list of
> > > > QObject. The first if statement shall check, wether the returned
> > > > QObject is of type QDesignerFormEditorPluginInterface. In C++ you
> > > > would do it with code like
> > > >
> > > > if ( (qobject_cast<QDesignerFormEditorPluginInterface*>(plugin)) )
> > > >
> > > > How can the problem be solved with PyQt4 and Python?
> > > >
> > > > Note: self.designer.pluginManager() returns an object of type
> > > > QDesignerPluginManager.
> > >
> > > The wrapper for QDesignerFormEditorPluginInterface must define
> > > some %ConvertToSubClassCode which will use RTTI provided by the
> > > instance to identify the right Python type object. See how PyQt does it
> > > for QObject and QEvent. If the instance doesn't provide any RTTI then
> > > you're stuck.
> >
> > Mustn't the %ConvertToSubClassCode go into the more general class (e.g.
> > QObject)?
>
> No - just in a QObject sub-class in the module.
>
> > Is there a way to extend the QObject wrapper?
>
> That's what sip does under the covers.
>

I am stuck at the moment due to my lack of sip know how. Below is the wrapper 
code in question. How does the %ConvertToSubClassCode have to be?

----------------------------------------------------------------------------
class QDesignerFormEditorPluginInterface
{

%TypeHeaderCode
#include <abstractformeditorplugin.h>
%End

public:
    virtual ~QDesignerFormEditorPluginInterface();

    virtual bool isInitialized() const = 0;
    virtual void initialize(QDesignerFormEditorInterface *core) = 0;
    virtual QAction *action() const = 0;

    virtual QDesignerFormEditorInterface *core() const = 0;
};
----------------------------------------------------------------------------

Regards,
Detlev
-- 
Detlev Offenbach
detlev at die-offenbachs.de


More information about the PyQt mailing list