[Qt-interest] QTableView and delegate

Wolfgang Pausch wolfgang.pausch at uibk.ac.at
Fri Nov 6 14:05:50 CET 2009


Hello Sean,

> > if I have a read-only QTableView with a model containing integers in some
> > column, and want to translate them into human-readable strings before
> > displaying them in the table, what is the best design?
> >
> > I first thought about using a column delegate, however I noticed that it is only
> > called if flags() returns Qt::ItemIsEditable, which is not what I want in a
> > read only table...  And even if flags() returns Qt::ItemIsEditable, the
> > delegate seems to become active only if I click on the cell.
> >
> > I think I might get what I want by using QAbstractItemView::setIndexWidget for
> > each cell where I want to translate ints to strings.  But this would mean that
> > I (a) would need custom widget classes, (b) would have several extra widgets
> > per row and (c) would have to set them manually e.g. when adding/removing rows.
> >
> > What do you think, is the latter really the right design, or is there some
> > simpler solution I missed so far?
> >   
> You could use a proxy model to do the translation and set that on the 
> views where you wish to see human readable data. Or if this would be for 
> every view, just do the translation in your model class. If you later 
> decide to make it read/write you would have to do the reverse 
> translation in your model's setData() function.

Yes this helps.  (although I was aware of this possibility, I just hoped for one where I can avoid adding a proxy model).  

By the way, what´s the reason why delegates only work when editing data?  I mean, passing the data through a delegate, calling it´s setEditorData method would be so easy and straightforward - at least for me as a user of the library...

Thanks,

Wolfgang




More information about the Qt-interest-old mailing list