aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlcontext.cpp
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2018-01-10 15:59:07 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2018-01-12 07:03:29 +0000
commit4d6830546619d16275b01f1f049fdcb0b6489f7a (patch)
treefeee3a660e22affd2ad4f6d5858478edecdac4df /src/qml/qml/qqmlcontext.cpp
parent6318a43ffc473ba101c955d96b39bc1b93ef7e61 (diff)
Add setContextProperties()
Setting all properties in one batch avoids unnecessary refreshing of expressions and is therefore a lot faster if there are many expressions in the context. In an example I created it takes 500ms to set 10 context properties using setContextProperty() and it takes about 150ms to set the context properties using setContextProperties. Change-Id: Ic7cf03cda292b316198f37f963b61a2388a288c9 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlcontext.cpp')
-rw-r--r--src/qml/qml/qqmlcontext.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/qml/qml/qqmlcontext.cpp b/src/qml/qml/qqmlcontext.cpp
index a32ed6e998..9d2e37a2ab 100644
--- a/src/qml/qml/qqmlcontext.cpp
+++ b/src/qml/qml/qqmlcontext.cpp
@@ -330,6 +330,49 @@ void QQmlContext::setContextProperty(const QString &name, QObject *value)
}
/*!
+ \since 5.11
+
+ Set a batch of \a properties on this context.
+
+ Setting all properties in one batch avoids unnecessary
+ refreshing expressions, and is therefore recommended
+ instead of calling \l setContextProperty() for each individual property.
+
+ \sa QQmlContext::setContextProperty()
+*/
+void QQmlContext::setContextProperties(const QVector<PropertyPair> &properties)
+{
+ Q_D(const QQmlContext);
+
+ QQmlContextData *data = d->data;
+
+ QQmlJavaScriptExpression *expressions = data->expressions;
+ QQmlContextData *childContexts = data->childContexts;
+
+ data->expressions = 0;
+ data->childContexts = 0;
+
+ for (auto property : properties)
+ setContextProperty(property.name, property.value);
+
+ data->expressions = expressions;
+ data->childContexts = childContexts;
+
+ data->refreshExpressions();
+}
+
+/*!
+ \since 5.11
+
+ \class QQmlContext::PropertyPair
+
+ This struct contains a property name and a property value.
+ It is used as a parameter for the \c setContextProperties function.
+
+ \sa QQQmlContext::setContextProperties()
+*/
+
+/*!
Returns the value of the \a name property for this context
as a QVariant.
*/