Missing QAbstractItemModel.multiData binding
Charles
peacech at gmail.com
Tue Aug 29 13:40:53 BST 2023
I tried using multiData with this code snippet but it seems to crash when
setting roleData.setData(...). Also I notice that the role values might be
negative. (Btw, ic is icecream print).
def _itemData(self, item, col):
match col.name:
case 'code':
return {
Qt.DisplayRole: item.code,
}
case 'earnings_chg':
return {
Qt.DisplayRole: f'{item.earnings_chg}%',
}
case 'time':
return {
Qt.DisplayRole: item.time.strftime('%Y-%m-%d'),
}
case 'earnings':
return {
Qt.DisplayRole: formatMoney(item.earnings),
}
def multiData(self, index, roleDataSpan):
ic(index, roleDataSpan)
item = self._items[index.row()]
col = self.COLUMNS[index.column()]
itemData = self._itemData(item, col)
for roleData in roleDataSpan:
role = roleData.role()
ic(role)
if value := itemData.get(role):
roleData.setData(value)
else:
match role:
case Qt.FontRole:
roleData.setData(style.TABLE_FONT)
case Qt.TextAlignmentRole:
align = col.align
if align == 'C':
roleData.setData(Qt.AlignCenter)
elif align == 'R':
roleData.setData(Qt.AlignVCenter |
Qt.AlignRight)
ic| earnings.py:66 in multiData()
index: <PyQt6.QtCore.QModelIndex object at 0x000001D17B77D000>
roleDataSpan: <PyQt6.QtCore.QModelRoleDataSpan object at
0x000001D17B77D4D0>
ic| earnings.py:72 in multiData()- role: 6
ic| earnings.py:72 in multiData()- role: 7
ic| earnings.py:72 in multiData()- role: 9
ic| earnings.py:72 in multiData()- role: 10
ic| earnings.py:72 in multiData()- role: 1
ic| earnings.py:72 in multiData()- role: 0
ic| earnings.py:72 in multiData()- role: 8
ic| earnings.py:72 in multiData()- role: -948493808
ic| earnings.py:72 in multiData()- role: 1897532384
ic| earnings.py:72 in multiData()- role: 1897532384
ic| earnings.py:72 in multiData()- role: 2033014364
ic| earnings.py:72 in multiData()- role: 2
ic| earnings.py:72 in multiData()- role: 16777216
ic| earnings.py:72 in multiData()- role: 1893028080
ic| earnings.py:72 in multiData()- role: 1897532384
ic| earnings.py:72 in multiData()- role: 1897532384
ic| earnings.py:72 in multiData()- role: 2033014458
ic| earnings.py:72 in multiData()- role: 2
ic| earnings.py:72 in multiData()- role: 2033021932
ic| earnings.py:72 in multiData()- role: 3
ic| earnings.py:72 in multiData()- role: 524288
ic| earnings.py:72 in multiData()- role: 1893028080
ic| earnings.py:72 in multiData()- role: 1897532384
ic| earnings.py:72 in multiData()- role: 1897532384
ic| earnings.py:72 in multiData()- role: 2033022038
ic| earnings.py:72 in multiData()- role: 1
ic| earnings.py:72 in multiData()- role: 22528
ic| earnings.py:72 in multiData()- role: 1893028080
On Sun, Aug 27, 2023 at 10:45 PM Phil Thompson <phil at riverbankcomputing.com>
wrote:
> On 14/08/2023 16:21, Jakub Fránek wrote:
> > Hello
> >
> > I am working on a PyQt app that features a large QTableView driven by a
> > custom QAbstractTableModel implementation. Profiling shows that even
> > after
> > heavy optimization, the program spends a lot of time calling
> > QAbstractItemModel.data method.
> >
> > I think that QAbstractItemModel.multiData method could improve the
> > performance considerably, however it seems that PyQt does not support
> > this
> > binding (since it does not even support QModelRoleDataSpan).
> >
> > My question is: is there any plan of supporting
> > QAbstractItemModel.multiData method in the future? If there is no such
> > plan
> > yet, I would like to cast my vote and humbly request this binding in
> > some
> > future version of PyQt.
>
> multiData() and QModelRoleSpan are implemented in the next snapshot -
> please test.
>
> Phil
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20230829/7f57ffa7/attachment.htm>
More information about the PyQt
mailing list