Delegate strangeness

Rafael Fernández López ereslibre at
Tue Jan 2 01:27:21 GMT 2007


I think I found a Qt bug, and for that reason I'm a bit sorry writing
it to these lists. I hope some Trolls read it.

Well, the main problem of the thing I'm going to describe is that this
have never been done before on KDE, and is the first time we have been
capable of using this functionality from Qt. The thing is that I'm
developing at kio_uiserver

The problem of this model is that it is not only modified by user
interaction (input), but it is updated through internal job behaviours
and progresses. Their behaviour can be modified through user
interaction too (like clicking on a button "Pause transfer", for

The internal data flow is being handled by the Observer, and it works
pretty nice. For handling the interaction with user (actions support)
I added the editing support for the delegate (and the model). As you
may know, there are some methods we should override to have the wanted

QWidget *createEditor ( QWidget * parent, const QStyleOptionViewItem &
option, const QModelIndex & index ) const

void updateEditorGeometry ( QWidget * editor, const
QStyleOptionViewItem & option, const QModelIndex & index ) const

void paint ( QPainter * painter, const QStyleOptionViewItem & option,
const QModelIndex & index ) const

on QAbstractItemDelegate. And playing with:

void openPersistentEditor ( const QModelIndex & index )

void closePersistentEditor ( const QModelIndex & index )

on QAbstractItemView for showing available actions (buttons) in all
jobs, and not only in the clicked (or double clicked) one, where the
editor is normally "temporarily" opened.

The problem is the next:

Using updateEditorGeometry I place the editor at the end of the
delegate, and above it you can find the other information, messages
like status, progress bar, size downloaded...

When the editor is showed (just after the job is added to the list) it
seems that the delegate itself freezes. I mean, you can click on the
button without problems and it works, but the progress bar and
messages just freezes. I've noticed that if you resize the window or
you click on the delegate it will redraw and the items on the delegate
will be updated and redrawn.

Since the editor can be placed wherever we want in the delegate (with
updateEditorGeometry), and it might not be the same size of the whole
delegate itself, i think the delegate should be redrawn too as it were
if no editor was opened.

We have to take in count that when we open an editor we are generally
going to edit only a value of the model, but we should have present
that while we have the editor opened, other changes can happen to the
model that the delegate needs to show/update while the editor is
opened, since different attributes were changed.

Thank you,
Rafael Fernández López.
>> Visit to unsubscribe <<

More information about the kde-core-devel mailing list