Purtroppo i documenti sono un po 'out-of-date (usa Qt4 API), ma se leggete sezione Caricamento componenti QML da C++ qui: https://doc.qt.io/qt-4.8/qtbinding.html
allora si dovrebbe avere qualcosa di simile (con QT5 api):
QQuickView view;
view.setSource(QUrl::fromLocalFile("MyView.qml"));
QQmlComponent component(view.engine()
, QUrl::fromLocalFile("MyItem.qml"));
QObject *object = component.create();
questo vi dà un QObject da un file .qml, ma quello che manca è il modo per aggiungere questo alla vista. In qml, gli oggetti non verranno disegnati a meno che non siano controllati dalla vista. Un modo per farlo è quello di aggiungere l'elemento al contesto principale, in questo modo:
QQmlProperty::write(object, "parent"
, QVariant::fromValue<QObject*>(view.rootObject()));
Inoltre, nota (di nuovo dal link qui sopra): "Si dovrebbe sempre usare QObject :: setProperty(), QDeclarativeProperty o QMetaProperty :: write() per modificare un valore della proprietà QML, per garantire che il motore QML venga informato della modifica della proprietà ".
Successivamente, dobbiamo impostare la proprietà dell'elemento, altrimenti il gestore di spazzatura JavaScript può eliminare il tuo articolo e puoi segare l'errore casualmente.
QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership);
Infine, è necessario ricordare di eliminare l'oggetto "oggetto". Dato che si tratta di un QObject dovresti usare:
object->deleteLater();
La speranza che aiuta qualcuno!
non dimenticare di importare –
Alan