[Qt][QML] QObject du C++ vers le QML: gestion mémoire

QObject du C++ vers le QML: gestion mémoire [Qt][QML] - C++ - Programmation

Marsh Posté le 17-02-2016 à 11:13:29    

Hello  :hello:

 

Je suis sur un projet C++ / QML depuis quelques mois. Ceci dit, le C++ et le QML, pour moi, c'est nouveau.

 

Tout d'abord, un exemple de code (heu ... pseudo-code, j'ai pas compilé, mais c'est l'idée)

 
Code :
  1. class Foo : public QObject
  2. {
  3.   Q_OBJECT
  4.   // snip ...
  5. }
  6. class Bar : public QObject
  7. {
  8.   Q_OBJECT
  9. public:
  10.   // snip ...
  11.   Q_INVOKABLE Foo* getFoo() { return new Foo(); }
  12. }
  13. int main(int argc, char* argv[])
  14. {
  15.   // snip ...
  16.   Bar bar;
  17.   qmlRegisterUncreatableType<Foo>("myLib", 1, 0, "foo", QString("no way :o" ));
  18.   view.rootContext().setContextProperty("barObject", (QObject*) &bar);
  19.  
  20.   //snip ...
  21. }
 

Depuis le QML, je serai ainsi capable d'appeler la méthode bar::getFoo(). Elle me renverra un nouvel objet foo fraichement initialisé.

 

Ma question : comment je libère la mémoire ? Je ne delete jamais mon objet ?

 

Si je comprends bien ça : http://developer.ubuntu.com/api/qm [...] tion-data/

 
Citation :

When data is transferred from C++ to QML, the ownership of the data always remains with C++. The exception to this rule is when a QObject is returned from an explicit C++ method call: in this case, the QML engine assumes ownership of the object, unless the ownership of the object has explicitly been set to remain with C++ by invoking QQmlEngine::setObjectOwnership() with QQmlEngine::CppOwnership specified.

 

c'est le moteur QML qui a l'ownership de mon instance de foo, et donc qui le libèrera le moment venu ? C'est bien ça ?

 

Edit : petite précision : pour plein de raison qui ne sont malheureusement pas de mon fait : Qt 4.8.


Message édité par kao98 le 17-02-2016 à 11:22:11

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 17-02-2016 à 11:13:29   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed