[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: Re: [PyQt] Bug Report: pyqt5 discard silently signal with missing optional parameters (dataChanged r
From: Phil Thompson <phil () riverbankcomputing ! com>
Date: 2014-02-21 16:01:43
Message-ID: f0ba21fd0b3a07599e0ebf02d47c3249 () www ! riverbankcomputing ! com
[Download RAW message or body]
On 10-01-2014 10:08 pm, Baptiste Lepilleur wrote:
> The issue is demonstrated in the attached example (pyqt 5.2, python
> 3.3). Below is the relevant excerpt:
>
> class ListModel(QAbstractItemModel):
> def __init__(self, parent=None):
> super(ListModel, self).__init__(parent)
>
> def testEmit(self):
> # This signal is silently dropped by pyqt (missing
> optional 3rd parameters). Why?
> self.dataChanged.emit(self.createIndex(1,0),
> QModelIndex())
> # This signal is sent as expected
> self.dataChanged.emit(self.createIndex(2,0),
> QModelIndex(), [])
>
> * Bug description:
>
> The signal QAbstractItemModel::dataChanged has the following
> signature:
> void QAbstractItemModel::dataChanged(
> const QModelIndex & topLeft,
> const QModelIndex & bottomRight,
> const QVector<int> & roles = QVector<int> ())
>
> If the optional roles parameters is not given when calling emit, the
> signal emission is discarded without any error reporting.
>
> For example:
>
> self.dataChanged.emit(self.createIndex(1,0),
> QModelIndex())
>
> Below is the output of the attached example showing that the expected
> first emit "onDataChanged 1" is missing:
>
> C:Python33python.exe debugemit.py
> onDataChanged 2
> ------------done-------------
>
> * Work-around:
>
> Pass the optional roles signal parameter:
>
> self.dataChanged.emit(self.createIndex(2,0),
> QModelIndex(), [])
>
> * Remarks:
>
> This bug usually goes unseen because the views are usually
> automatically refreshed if the mouse if moved over the view
> associated
> to the model.
>
> 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.
>
> IMHO a fairly serious bug as Ive never seen an example of
> dataChanged.emit() with the roles parameter...
>
> Lets me know if the above is unclear or more details are required, Id
> hate to see anyone else losing time on this issue,
> Baptiste.
This should be fixed in the current snapshots. The current SIP snapshot
is required.
Phil
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic