How to insert many items into QListView without making the app freeze?
-
Ok , i understand , i was thinking its component that can be used .
Thanks .
so if i understand you right , you basically cache all the items ? pre made empty items?
what if i like to use native Qt class's what should i use?
thanks for helping -
I keep them in a memory structure, yes. So does QStandardItemModel. You can use any convenient memory structure. I already had a flexible matrix class in that project, so I decided to use it, but you can find plenty of alternatives. My version worked with QVariants to stay close to the QAIM API. If you want to use other types, you should considder if you should not rather create a real 'store' kind of object (-hierarchy) that provides a good, well structured API to access your data objects, and create a QAIM that works as an interface between that store and your item views.
-
-Another approach would be to subclass [[Doc:QAbstractListModel]] (you're using the model an a list view, right?) and reimplement the relevant methods. I'm with Andre here, what you need is not achievable with the QStandardItemModel with reasonable effort.-
I take that back. Looking at the snippet, I overlooked the setIndexWidget() call at first sight. One cannot speed up this much.
-
Thanks you both for the help . to understand it more .
@Volker what do you mean by :
"need is not achievable with the QStandardItemModel with reasonable effort."
what is wrong with the QStandardItemModel im using ?
what is not achievable with QStandardItemModel that i will need to implement with QAbstractListModel? the adding the items into memory ?
Thanks again . -
With a subclass of the QAbstractXXXModels you can connect the webservice to the model directly. In that processing method you tell the model that you are going to change its contents, then you do the actual changes, then you tell the model that you're ready. This cannot be done from outside the model, as you would have to do with the QStandardXXXModels.
But I read back and noticed, that you use setIndexWidget(). This isn't handled by the models at all, but only by the view. So you cannot speed up things by using another model class here.
-
Ah, I missed the use of that method as well. Sorry.
All bets are off. It is a wart on the face of the model view framework, and it makes sure the whole thing is basically useless. Putting more and more widgets on your view is never, ever going to be fast. Sorry. -
what if i set up like 100 widget items in the Init , when i start the app
and set them to be hidden , and when i get the info to fill them i just show the right widget items? ( i need only like 100 or 150 to be present in view) -
In your case, I would consider using a [[Doc:QScrollArea]] with a [[Doc:QVBoxLayout]], as that is more or less visibly the same as a list view consisting only of widgets.
-
Do you really, really need to have actual widgets?
-
what is wrong with me inserting the widgets into the Treeview?
using QScrollArea will be faster? -
Andre , i asked this and other forums before but i could find solutions to
things like making label with mouse select text for copy when i tried to use
itemdelegate"developer.qt.nokia.com/forums/viewthread/13515/":developer.qt.nokia.com/forums/viewthread/13515/
-
I would go with a scroll area here, instead of a list view.
-
thanks , but why?
-
Because the item views are a bit imperformant when using many item widgets. That's not the main usage they were designed for.