[PyKDE] Delete of QListViewItems

Phil Thompson phil at river-bank.demon.co.uk
Sat Nov 11 11:55:29 GMT 2000


Per Gummedal wrote:
> 
> The QT documentation of QListViewItem::takeItem says:
>   Removes item from this object's list of children and causes an update
>   of the screen display.  The item is not deleted.
>   You should normally not need to call this function,
>   as QListViewItem::~QListViewItem() calls it.
>   The normal way to delete an item is delete.
> 
> In PyQt if I use del(item) the item is not removed from the list,
> if i use takeItem(item) it is, but according to the documentation it
> will not be deleted (from memory).
> 
> Is this a bug, or what function should I use to delete items ?

What you have to do is to takeItem(item) and then del(item).

When a QListViewItem is created from Python, responsibility for calling
the C++ dtor is passed to C++ from Python - because the parent QListView
or QListViewItem takes ownership of it. This means that when you
del(item) (and the reference count reaches zero) the Python object
disappears but the C++ dtor is not called.

Calling takeItem(item) removes the item from the parent QListView or
QListViewItem and transfers reponsibility from calling the C++ dtor back
to Python. This means that when you del(item) (and the reference count
reaches zero) the C++ dtor is called and the item disappears from
memory.

I've updated the documentation.

Phil




More information about the PyQt mailing list