lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


2011/4/12 Michal Kottman <k0mpjut0r@gmail.com>:
> On 12 April 2011 18:19, Jerome Vuarand <jerome.vuarand@gmail.com> wrote:
>> 2011/4/12 Michal Kottman <k0mpjut0r@gmail.com>:
>>> It MAY still crash under heavy load, or there may be some API quirks, so
>>> any feedback is highly appreciated.
>>
>> In the documentation, you write that one shouldn't explicitly delete
>> an object created by lqt when the object is in a QObject parent/child
>> tree. AFAIK this is allowed in C++, the QObject destructor taking care
>> of removing the deleted object from its parent child list (and
>> deleting its own children). Can you tell us why it's not allowed in
>> Lua?
>
> I am sorry if the documentation causes confusion, but I didn't state
> that you shouldn't explicitly delete an object created in lqt. Of
> course you can delete it, and when the object is derived from QObject,
> then all it's children are deleted too.
>
> The problem is with automatic memory collection of objects that Qt can
> keep reference to itself. Lua has no way of knowing about those
> references, and may choose to delete the object (and possibly break
> havoc if Qt tries to access it).
>
> I met with this when I created a model for a QListView and filled it
> with items. I created them as new_local() (= use Lua GC), and didn't
> keep references to them. After some time (mouse events, scrolling, ...
> over the list view), the items started "magically disappearing" - that
> is because after Lua deleted the "unreachable" items, they removed
> themselves cleanly from the model. However, this "clean behavior"
> cannot be guaranteed for all objects, especially for those that do not
> inherit from QObject.

QAbstractItemModel is a special kind of beast, I've got trouble
wrapping my head around it even in C++. Qt wants total control over
the lifetime of items.

So the same rules as the C++ ones apply? If in C++ I can explicitly
delete a QObject at any time (which is not the case for a
QAbstractItemModel item, but it is for most widgets), I can let Lua
collect it (which I agree is rarely what you want for widgets)?