"complete control" owner drawing of QListWidget rows
-
wrote on 17 Mar 2011, 18:52 last edited by
I need a view that's something like Skype's contact view. List of names, with an image at their side, and some buttons that become visible as you select a row. Using QListWidgetItem does answer some of these requirements but is severely limited, by icon width and others.
One other thing that's less of a priority -- QListWidget scrolls in rigid steps. The scroll is not smooth and you can never see "half a row" like you can in Skype. It's like QListWidget scrolls up and down in row-height steps, while Skype scrolls in single pixels. Much smoother and pleasing from a UX standpoint. I know Skype is QT. Are they using a different control for this?
How do I achieve complete control over the drawing of a row in QListWidget?
-
wrote on 17 Mar 2011, 19:04 last edited by
@setVerticalScrollMode(QAbstractItemView::ScrollPerPixel)@ took care of the smooth scrolling problem. now the owner draw issues remain.
-
wrote on 17 Mar 2011, 19:05 last edited by
Concerning the scrolling, check out QAbstractItemView::setVerticalScrollMode ( ScrollMode mode )
If you need complete control, you need to use QItemDelegate.
-
wrote on 17 Mar 2011, 19:16 last edited by
Thanks. Will give those a try. Any idea how how implement custom sorting on such a list?
-
wrote on 17 Mar 2011, 19:20 last edited by
It depends a bit on what you want to do. If you can get away with it, the easiest way is to set something you can sort on as a custom role and use that role to sort on. If not, you will need to reimplement sort() on your data model.
-
wrote on 17 Mar 2011, 19:38 last edited by
Not so sure about a model. I have a QListWidget to which i "add" instances of QListWidgetItem. Are you saying I can instantiate an external "Data model", populate it with my data, and then have the QListWidget use that as the source to populate rows instead of me "adding" it manually there?
-
wrote on 17 Mar 2011, 19:42 last edited by
Errr... Sorry, no. I never use Q*Widget myself, so I am not so used to the limitations of these classes. I was thinking about the View versions where you can set your own model.
-
wrote on 17 Mar 2011, 19:57 last edited by
I can do that, so should I replace my QListWidget with the QListView?
-
wrote on 17 Mar 2011, 23:04 last edited by
That makes life sometimes a bit easier, especially when you do more complex things.
You use a QListView as widget and create a custom model derived from QAbstractListModel, that's not too hard, especially if it's read only.
Then you can use a QSFPM (QSortFilterProxyModel) which you use in the view to do sorting. If you use QSFPM you have full access to the sorting criteria.
Via a custom delegate (derived from QStyledItemDelegate) you can do custom drawing, change the size hint for rows etc.
8/9