Didn't get any response yesterday...wondering if I didn't give enough
information?
Even a working example in python of a table or list view using
QItemDelegate subclasses to display persistent editors would be enough
to get me going...I just can't seem to get it to work right.
Thanks,
-David
David Hirschfield wrote:
I have a simple test app which displays a QTableWidget with a custom
QItemDelegate to display the items as buttons, checkboxes and comboboxes.
The widgets are supposed to be editable at all times, so I use:
self.widgetTable.setItem(row, i, tableItem)
self.widgetTable.openPersistentEditor(tableItem)
to add the item and make the editor always visible and ready for
interaction.
I'm not having any trouble setting up the table and having my rows
display properly with the widgets ready for interaction. The problem
comes when I interact with the editor widgets.
My QItemDelegate subclass, called WidgetDelegate, implements the
createEditor(), setEditorData() and setModelData() methods to build
the editor widget, and supposedly to set the editor value when the
model changes, and to set the model when the user interacts with the
editor. createEditor() seems to be working, since my widgets show up
in the table and can be interacted with, but neither setEditorData()
nor setModelData() are ever called when the table widgets are
displayed, or when I interact with the editor widgets.
When creating a checkbox widget as an editor, for example, I connect
its stateChanged() signal to a method in my item delegate which emits
the commitData() signal:
checkboxWidget.connect(checkboxWidget,QtCore.SIGNAL("stateChanged(int)"),delegate.commit)
where delegate.commit() is:
def commit(self, *args):
self.emit(QtCore.SIGNAL("commitData(QWidget *)"),self.sender())
I assumed that the commitData() signal should tell the table to update
the model?
I see the commitData() signal gets sent, if I connect something up to
that signal, it does get emitted any time I interact with one of the
editor widgets. But again, the delegate never seems to call
setModelData() or setEditorData(), so the model is never updated
(connecting my app up to the itemChanged() signal from the table
itself shows that, since it never gets that signal).
So what's the right way to do this? I was trying to convert the
"Icons" example from the Qt site, which is in C++, over to python -
specifically the ImageDelegate class which does mostly what I'm trying
to do:
http://doc.trolltech.com/4.3/widgets-icons.html#imagedelegate-class-definition
But it isn't working for me. Am I missing some connections between the
editor widgets and the delegate? Or between the delegate and the table?
Any help appreciated!
-David
--
Presenting:
mediocre nebula.
_______________________________________________
PyQt mailing list [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt