I am trying to display a large amount of columnar records in a scrollable view using Qt (5.1).
The number of rows I would like to be able to browse can vary from 100 million to 1 Billion, say.
The QTableWidget with a custom model works a few million rows, but the QTableWidget allocates data for each row because you can re-size the rows height, and so it must store data for this, which can use megabytes or even gigabytes of memory with 100M rows.
I do not require the re-sizeable rows functionality just a multi-column list would be ideal, but QTreeCtrl doesnt seem to work with many rows, and QList seems to only support single columns.
Should I be implementing a custom widget from QAbstractItemView for this purpose?
For those familiar with wxwidgets/wepython it can be done like this, and works well with billions of rows:
import wx
class VirtualList(wx.ListCtrl):
def __init__(self, parent, id, pos, size, flags):
wx.ListCtrl.__init__(self, parent, id, pos, size, flags)
def OnGetItemText(self, item, column):
return "Row %d, Column %d" % (item, column)
QTreeView
that can handle multirow display and work faster thanQTableView
. It hasuniformRowHeights
property that holds whether all items in the treeview have the same height, which enables the view to do some optimizations. Also its allowed to load chunks of data. Not all data at once.