Hi Sylvain,

It is not so complicated, when passing an object instance to QML (it can only 
by pointers of QObject based classes), if the instance doesn’t have a parent, 
the QML Engine take ownership of the object and delete if when it is no more 
needed.
If the instance has a parent, then QML Engine don’t try to delete it. It is the 
parent which will delete the instance, at least when parent is deleted.
So, there is no memory leak issue.

Best regards

Fabrice

Von: Interest <interest-boun...@qt-project.org> Im Auftrag von Sylvain Pointeau
Gesendet: Freitag, 1. März 2019 17:08
An: Jason H <jh...@gmx.com>
Cc: Qt Project <interest@qt-project.org>
Betreff: Re: [Interest] using a custom class as parameter of signal/slot, used 
in QML

Hi Jason,

thank you for the link, I did have a look but they are doing the same, with a 
comment "// parent-less QObject -> ownership transferred to the JS engine"

but what if there was no connection, or consumed by another object, then I 
guess there will be a memory leak?

I don't feel comfortable sending pointer to objects through the signals, the 
ownership for me is not clear.
I guess there is no real solution, except to avoid using objects in signals if 
QML is a consumer?

it is really puzzling me...

Best regards,
Sylvain


On Fri, Mar 1, 2019 at 4:12 PM Jason H <jh...@gmx.com<mailto:jh...@gmx.com>> 
wrote:
Check out qtmultimedia/examples/multimedia/video/qmlvideofilter_opencl fo the 
filter result types. I think that's what you want?

I find it easier to code and work with to just rely on QVariant conversion. 
QVariantList and QVariantMap are transparently converted to JS Objects.

Sent: Friday, March 01, 2019 at 6:43 AM
From: "Sylvain Pointeau" 
<sylvain.point...@gmail.com<mailto:sylvain.point...@gmail.com>>
To: "Qt Project" <interest@qt-project.org<mailto:interest@qt-project.org>>
Subject: [Interest] using a custom class as parameter of signal/slot, used in 
QML
Dear all,

I understood how to use a struct / simple class as a parameter of a signal / 
slot, and it works well by value.

However as soon as we have to declare the type for QML, it is not good anymore.
It seems that it must be derived from QObject and passed by pointer.

Do I understand well that the QML world does only accept pointers on QObject?

However I don't understand, who owns the pointer of the custom class (derived 
from QObject) and who actually deletes it?
(I tried a sharepointer but QML does not know how to handle it)

Do you have any idea?

Best regards,
Sylvain


_______________________________________________ Interest mailing list 
Interest@qt-project.org<mailto:Interest@qt-project.org> 
https://lists.qt-project.org/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to