aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickwidgets/qquickwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickwidgets/qquickwidget.cpp')
-rw-r--r--src/quickwidgets/qquickwidget.cpp31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp
index 147d0a0398..d3f7e52bb6 100644
--- a/src/quickwidgets/qquickwidget.cpp
+++ b/src/quickwidgets/qquickwidget.cpp
@@ -734,6 +734,22 @@ void QQuickWidget::setContent(const QUrl& url, QQmlComponent *component, QObject
d->setRootObject(item);
emit statusChanged(status());
}
+/*!
+ Sets the initial properties \a initialProperties with which the QML
+ component gets initialized after calling \l QQuickWidget::setSource().
+
+ \note You can only use this function to initialize top-level properties.
+ \note This function should always be called before setSource, as it has
+ no effect once the component has become \c Ready.
+
+ \sa QQmlComponent::createWithInitialProperties()
+ \since 6.9
+*/
+void QQuickWidget::setInitialProperties(const QVariantMap &initialProperties)
+{
+ Q_D(QQuickWidget);
+ d->initialProperties = initialProperties;
+}
/*!
Returns the source URL, if set.
@@ -1248,7 +1264,9 @@ void QQuickWidget::continueExecute()
return;
}
- QObject *obj = d->component->create();
+ std::unique_ptr<QObject> obj(d->initialProperties.empty()
+ ? d->component->create()
+ : d->component->createWithInitialProperties(d->initialProperties));
if (d->component->isError()) {
const QList<QQmlError> errorList = d->component->errors();
@@ -1260,7 +1278,8 @@ void QQuickWidget::continueExecute()
return;
}
- d->setRootObject(obj);
+ if (d->setRootObject(obj.get()))
+ Q_UNUSED(obj.release());
emit statusChanged(status());
}
@@ -1268,11 +1287,12 @@ void QQuickWidget::continueExecute()
/*!
\internal
*/
-void QQuickWidgetPrivate::setRootObject(QObject *obj)
+bool QQuickWidgetPrivate::setRootObject(QObject *obj)
{
Q_Q(QQuickWidget);
if (root == obj)
- return;
+ return true;
+
if (QQuickItem *sgItem = qobject_cast<QQuickItem *>(obj)) {
root = sgItem;
sgItem->setParentItem(offscreenWindow->contentItem());
@@ -1296,7 +1316,10 @@ void QQuickWidgetPrivate::setRootObject(QObject *obj)
q->resize(initialSize);
}
initResize();
+ return true;
}
+
+ return false;
}
QPlatformBackingStoreRhiConfig QQuickWidgetPrivate::rhiConfig() const