Leider sind die docs etwas out-of-date (verwendet Qt4 api), aber Wenn Sie Abschnitt Laden QML-Komponenten von C++ hier lesen: https://doc.qt.io/qt-4.8/qtbinding.html
Dann sollten Sie so etwas wie (mit QT5 api haben):
QQuickView view;
view.setSource(QUrl::fromLocalFile("MyView.qml"));
QQmlComponent component(view.engine()
, QUrl::fromLocalFile("MyItem.qml"));
QObject *object = component.create();
Dies gibt Ihnen eine QObject aus einer .qml Datei, aber was fehlt, ist, wie dies zu der Ansicht hinzuzufügen. In qml werden Elemente nur dann gezeichnet, wenn sie an die Ansicht übergeben werden. Eine Möglichkeit, dies zu tun, ist das Element in dem Root-Kontext hinzufügen, etwa so:
QQmlProperty::write(object, "parent"
, QVariant::fromValue<QObject*>(view.rootObject()));
Auch Note (wieder aus dem obigen Link): "Sie sollten immer QObject verwenden :: setProperty(), QDeclarativeProperty oder QMetaProperty :: write(), um einen QML-Eigenschaftswert zu ändern, um sicherzustellen, dass die QML-Engine über die Änderung der Eigenschaft informiert wird ".
Als nächstes müssen wir die Eigentümerschaft des Elements festlegen, andernfalls kann der JavaScript-Müllhandler Ihr Element löschen und Sie können den Fehler nach dem Zufallsprinzip sortieren.
QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership);
Schließlich müssen Sie daran denken, das Objekt "Objekt" zu löschen. Da es sich um ein QObject handelt, sollten Sie folgendes verwenden:
object->deleteLater();
Hoffe, das hilft jemandem!
nicht vergessen zu importieren –
Alan