[PyQt] QDataWidgetMapper and addMapping with a custom property name: setProperty never called

TP paratribulations at free.fr
Tue Nov 9 19:29:43 GMT 2010


Hello,

I currently use QDataWidgetMapper with a custom property name:

self.mapper.addMapping( widget, index, propertyName )

Now let us look at the private method populate() of 
src/gui/itemviews/qdatawidgetmapper.cpp (Qt source code):

//////
void QDataWidgetMapperPrivate::populate(WidgetMapper &m)
{
    if (m.widget.isNull())
        return;

    m.currentIndex = indexAt(m.section);
    if (m.property.isEmpty())
        delegate->setEditorData(m.widget, m.currentIndex);
    else
        m.widget->setProperty(m.property, 
m.currentIndex.data(Qt::EditRole));
}
//////

So, the .setEditorData() method of the delegate is called when there is no 
custom property name, and on the contrary the .setProperty() method of the 
widget under consideration is called when a custom property name is 
specified (this is my case).

I use QTextEdit with a custom property name ("plainText" instead of the 
default property "html"), I have tried to write my own QTextEdit, 
QTextEdit2, with a specialized setProperty method to perform some action 
before setting the property:

class QTextEdit2( QTextEdit ):
   def __init__( self, parent = None ):
      super( QTextEdit2, self ).__init__( parent )
   def setProperty( self, name, qvariant ):
      # some code to do some action
      super( QTextEdit2, self ).setProperty( name, qvariant )

But this *setProperty method is never called*, contrary of what we should 
expect due to the code of QDataWidgetMapper.cpp above!
All is happening as if the setProperty method of the C++ parent object 
(QTextEdit) is called, but not the method setProperty defined in the Python 
code of the used widget, QTextEdit2.

What is the problem?

Thanks a lot in advance, because I am currently totally stuck.

Julien


More information about the PyQt mailing list