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 :
- class Foo : public QObject
- {
- Q_OBJECT
- // snip ...
- }
- class Bar : public QObject
- {
- Q_OBJECT
- public:
- // snip ...
- Q_INVOKABLE Foo* getFoo() { return new Foo(); }
- }
- int main(int argc, char* argv[])
- {
- // snip ...
- Bar bar;
- qmlRegisterUncreatableType<Foo>("myLib", 1, 0, "foo", QString("no way :o" ));
- view.rootContext().setContextProperty("barObject", (QObject*) &bar);
-
- //snip ...
- }
|
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