Новый объект qml добавлен в сцену в C++
У меня проблема с добавлением нового объекта QML в существующую сцену.
мой main.qml
источник:
ApplicationWindow
{
id:background
visible: true
width: 640
height: 480
}
MyItem.qml
источник:
Rectangle
{
width: 100
height: 62
color: "red"
anchors.centerIn: parent
}
Наконец, вот мой main.cpp
источник:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QQmlComponent *component = new QQmlComponent(&engine);
component->loadUrl(QUrl("qrc:/MyItem.qml"));
qDebug() << "component.status(): "<< component->status();
QObject *dynamicObject = component->create();
if (dynamicObject == NULL) {
qDebug()<<"error: "<<component->errorString();;
}
return app.exec();
}
main.qml
отображается правильно, но MyItem.qml
не появляется внутри main.qml
, Component.status()
возвращает состояние Ready
ошибок нет dynamicObject
, Что я делаю неправильно?
2 ответа
Вам нужно указать родительский элемент для элемента, иначе он не является частью визуальной иерархии и не будет отображаться.
Я думаю, что вы должны использовать QQuickView
вместо QQmlEngine
, main.cpp
было бы:
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQuickView view;
view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view.show();
QQmlComponent component(view.engine(), QUrl("qrc:/MyItem.qml"));
QQuickItem *item = qobject_cast<QQuickItem*>(component.create());
item->setParentItem(view.rootObject());
QQmlEngine::setObjectOwnership(item, QQmlEngine::CppOwnership);
return app.exec();
}
И вам нужно изменить main.qml
введите от ApplicationWindow
в Item
Item
{
id:background
visible: true
width: 640
height: 480
}
Это проще, и таким образом вы можете создать класс, который расширяет QQuickView
и который управляет созданием ваших новых предметов.