[PyQt] [PyQt5 BUG] the 3rd parameter of QAbstractItemModel::dataChanged() is optional

Phil Thompson phil at riverbankcomputing.com
Sat Dec 21 15:47:18 GMT 2013


On 20-12-2013 4:46 am, iMath wrote:
> when I run the code here
> http://codepad.org/ubtleeFG
> the following error happened
>
>>>>
> Traceback (most recent call last):
>  File "E:g.py", line 22, in timerHit
>  self.dataChanged.emit (topLeft, topLeft);
> TypeError: QAbstractItemModel.dataChanged[QModelIndex, QModelIndex,
> list-of-int] signal has 3 argument(s) but 2 provided
>
> the cause is that the 3rd parameter of
>
> VOID QABSTRACTITEMMODEL::DATACHANGED(CONST QMODELINDEX &_ TOPLEFT_,
> CONST QMODELINDEX &_ BOTTOMRIGHT_, CONST QVECTOR<INT> &_ ROLES_ =
> QVECTOR<INT> ()) [SIGNAL]
>
>  is optional,while in PyQt5 it seems not .

Qt implements signals with default arguments as multiple signals with 
fixed arguments. The overload with the largest number of arguments is 
the default one as far as PyQt is concerned - the one with 3 arguments 
in this case.

Therefore you must specify the 3rd argument...

     self.dataChanged.emit(topLeft, topLeft, [])

...or specify the overload with 2 arguments...

     self.dataChanged[QModelIndex, QModelIndex].emit(topLeft, topLeft)

Tonight's snapshot makes emit() a bit smarter so that your current...

     self.dataChanged(topLeft, topLeft)

...will work.

Phil


More information about the PyQt mailing list