[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