[PyQt] Problem getting QItemDelegate to work
David Hirschfield
davidh at ilm.com
Fri Apr 25 18:16:30 BST 2008
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.
More information about the PyQt
mailing list