Suggestions Please : Better way to handle large set of data in QML List view/C++ List model
In my project, I need to display list of some data using QML List view.And, the QT version I am using is QT 5.0.2. Since, scroll bar view is not available in this version of Qt, I managed to implement it by following this example.
Now, the data source is an other component which has provided C++ APIs to request for range of data. And the number of elements in the data set can be huge (in terms of tens of thousands).
I have followed below steps to achieve my requirements :
- I have a created a C++ class that inherits from QAbstractListModel and I have overridden rowCount, data, canfetchmore and fetch more functions.
- And in the QML, I have referred the instance C++ as model.
- Whenever fetchmore() function is called, I am requesting next set of data using C++ APIs that are provided by another component and appending the same to my list model.
So far, it is good. But I need few clarifications -
- If I keep appending the data to my list model,then I will end up storing thousands of elements in the list (I don't want to do that). I want to limit the number of elements in the list and use it as a ring buffer. Is this possible?
- QModelIndex parameter in fetchmore is received as invalid Index. Why?
- Assume a case : alphabets are mentioned on scrollbar, and when user selects Y on scrollbar, I should fetch elements that starts with Y. Here, I can fetch the data from my external component and reset the list model with new data. But, if I do that,then my list will start with Y-elements and I will not be able to scroll up to get previous elements. -- Is there any other way to achieve this?
- Also, my other component takes considerable time if I ask huge set of data (for example in cases as mentioned in point 3) - Any suggestions to make a better design to handle this case?
- Is there any way, other than fetchmore(), to update the model dynamically.
I have spent good amount of time on google to get answers to my questions and I have successfully FAILED. :(
Any help appreciated. Thanks in advance.
I have managed to handle it in better way. Please check this post for an answer.