Hi Jérôme,

I assume that parent.isValid is checking the parent QModelIndex by calling parent.model().columnCount within the DummyModel. There used to be a Qt utility to check that your models have the correct overrides.  Note that the source model cannot rely on the proxy model for anything - it must be self contained.

Regards, Tony


On 18/12/2017 1:04 AM, Jérôme Laheurte wrote:
I’m trying to use a QAbstractProxyModel (more specifically a QIdentityProxyModel) to present differently columned models for the same underlying model. So the source model doesn’t implement column-related stuff, but the proxy model does. It goes like this:

/#!/usr/bin/env python3/
/#-*- coding: ISO-8859-1 -*-/

*from* PyQt5 *import* QtCore, QtWidgets

*class* DummyModel(QtCore.QAbstractItemModel):
*def* rowCount(self, parent):
*if* parent.isValid():
*return* 0
*return* 10

*def* parent(self, index):
*return* QtCore.QModelIndex()

*def* index(self, row, column, parent):
*if* parent.isValid():
*return* QtCore.QModelIndex()
*return* self.createIndex(row, column)


*class* ProxyModel(QtCore.QIdentityProxyModel):
*def* __init__(self, model):
super().__init__()
        self.setSourceModel(model)

*def* columnCount(self, parent):
*return* 3

*def* data(self, index, role):
*if* index.isValid() *and* role == QtCore.Qt.DisplayRole:
*return* 'Item #%d,%d' % (index.row(), index.column())


*class* MainWindow(QtWidgets.QMainWindow):
*def* __init__(self):
super().__init__()

        view = QtWidgets.QTreeView(self)
        view.setModel(ProxyModel(DummyModel()))
        self.setCentralWidget(view)

        self.show()
        self.raise_()


*if* __name__ == '__main__':
    app = QtWidgets.QApplication([])
    win = MainWindow()
    app.exec_()

Unfortunately running this gives me this on the console:

NotImplementedError: QAbstractItemModel.columnCount() is abstract and must be overridden

And nothing displays unless I define `columnCount` in the source model. So my guess is that some method in QAbstractProxyModel *other than columnCount()* calls sourceModel()->columnCount() directly instead of the proxy’s version. Is that a bug ?

Best regards
Jérôme Laheurte



_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to