<div dir="ltr">The issue is demonstrated in the attached example (pyqt 5.2, python 3.3). Below is the relevant excerpt:<div><div><br></div><div><div>class ListModel(QAbstractItemModel):</div><div>    def __init__(self, parent=None):</div>

<div>        super(ListModel, self).__init__(parent)</div><div><br></div><div>    def testEmit(self):</div><div>        # This signal is silently dropped by pyqt (missing optional 3rd parameters). Why?</div><div>        self.dataChanged.emit(self.createIndex(1,0), QModelIndex())</div>

<div>        # This signal is sent as expected</div><div>        self.dataChanged.emit(self.createIndex(2,0), QModelIndex(), [])</div></div><div><br></div></div><div>* Bug description:</div><div><br></div><div>The signal QAbstractItemModel::dataChanged has the following signature:</div>

<div>void QAbstractItemModel::dataChanged(</div><div>    const QModelIndex & topLeft, </div><div>    const QModelIndex & bottomRight, </div><div>    const QVector<int> & roles = QVector<int> ())<br>

</div><div><br></div><div>If the optional roles parameters is not given when calling emit, the signal emission is discarded without any error reporting.</div><div><br></div><div>For example:</div><div><div>        self.dataChanged.emit(self.createIndex(1,0), QModelIndex())</div>

</div><div><br></div><div>Below is the output of the attached example showing that the expected first emit "onDataChanged 1" is missing:</div><div><br></div><div><div>C:\Python33\python.exe debugemit.py</div><div>

onDataChanged 2</div><div>------------done-------------</div></div><div><br></div><div><br></div><div>* Work-around:</div><div><br></div><div>Pass the optional roles signal parameter:</div><div><div>        self.dataChanged.emit(self.createIndex(2,0), QModelIndex(), [])</div>

</div><div><br></div><div>* Remarks:</div><div><br></div><div>This bug usually goes unseen because the views are usually automatically refreshed if the mouse if moved over the view associated to the model.</div><div><br>
</div>
<div>It was exposed by a model shared by multiple editable views with a custom setData(). It took many hours to figure out the root cause of the lack of refresh.</div><div><br></div><div>IMHO a fairly serious bug as I've never seen an example of dataChanged.emit() with the roles parameter...</div>

<div><br></div><div>Let's me know if the above is unclear or more details are required, I'd hate to see anyone else losing time on this issue,</div><div>Baptiste.</div><div><br></div></div>