set parent when creating a QML component from C++
Unsolved
QML and Qt Quick
-
wrote on 10 Jan 2016, 01:02 last edited by
Hello,
I've a QML component that is created from C++ code:
QML Code:
Rectangle { width: parent.width y: parent.height / 2 color: "red" }
C++ Code:
QQmlComponent component(engine, QUrl(src)); QObject *comp = component.create(); QQuickItem *item = qobject_cast<QQuickItem*>(comp); item->setParentItem(root);
When the component is created appears these errors:
TypeError: Cannot read property 'height' of null
TypeError: Cannot read property 'width' of nullOn creation, the parent property is null and not is valid until the item->setParentItem is executed. How can I set the parent item when creating the component? or how to avoid these errors?
Best regards.
-
wrote on 31 Aug 2019, 09:37 last edited by
There are object cast need to be done for "root" object too
QQmlComponent component(engine, QUrl(src)); QObject *comp = component.create(); QQuickItem *item = qobject_cast<QQuickItem*>(comp); item->setParentItem(qobject_cast<QQuickItem*>(root));
This works for me in my project:
// QtQuick Application int main(int Counter, char *Arguments[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication Application(Counter, Arguments); QQmlApplicationEngine Engine; Engine.load(QUrl(Main)); if (Engine.rootObjects().isEmpty()) { return -1; } QObject *oRootObject = dynamic_cast<QObject*>(Engine.rootObjects()[0]); QObject *oBottomBlock = oRootObject->findChild<QObject*>("bottomBlock"); if (oBottomBlock) { QQmlComponent oComponent(&Engine,QUrl(QString("qrc:/ButtonExit.qml"))); QObject *oButtonExit = oComponent.create(); QQuickItem *oItemButtonExit = qobject_cast<QQuickItem*>(oButtonExit); oItemButtonExit->setParentItem(qobject_cast<QQuickItem*>(oBottomBlock)); } return Application.exec(); }