From a4895dc77c556e9ab7af663057025857ae0d885b Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@nokia.com> Date: Wed, 7 Apr 2010 14:37:14 +0200 Subject: [PATCH] Check if the property is valid If the property is not valid(not exists) simply return. --- .../core/instances/objectnodeinstance.cpp | 22 +++++++++++++++---- .../instances/qmlgraphicsitemnodeinstance.cpp | 3 +++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp index 8d9c12e2911..db259b6ec4f 100644 --- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp +++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp @@ -358,6 +358,9 @@ void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldPare { QDeclarativeProperty metaProperty(oldParent, oldParentProperty, context()); + if (!metaProperty.isValid()) + return; + if (isList(metaProperty)) { removeObjectFromList(metaProperty, object, nodeInstanceView()->engine()); } else if (isObject(metaProperty)) { @@ -415,6 +418,9 @@ void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant { QDeclarativeProperty property(object(), name, context()); + if (!property.isValid()) + return; + QVariant oldValue = property.read(); if (oldValue.type() == QVariant::Url) { QUrl url = oldValue.toUrl(); @@ -439,11 +445,13 @@ void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant void ObjectNodeInstance::setPropertyBinding(const QString &name, const QString &expression) { - QDeclarativeContext *QDeclarativeContext = QDeclarativeEngine::contextForObject(object()); - QDeclarativeProperty metaProperty(object(), name, context()); - if (metaProperty.isValid() && metaProperty.isProperty()) { - QDeclarativeBinding *binding = new QDeclarativeBinding(expression, object(), QDeclarativeContext); + + if (!metaProperty.isValid()) + return; + + if (metaProperty.isProperty()) { + QDeclarativeBinding *binding = new QDeclarativeBinding(expression, object(), context()); binding->setTarget(metaProperty); binding->setNotifyOnValueChanged(true); QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(metaProperty, binding); @@ -499,6 +507,9 @@ void ObjectNodeInstance::refreshProperty(const QString &name) { QDeclarativeProperty property(object(), name, context()); + if (!property.isValid()) + return; + QVariant oldValue(property.read()); if (property.isResettable()) @@ -521,6 +532,9 @@ void ObjectNodeInstance::resetProperty(QObject *object, const QString &propertyN QDeclarativeProperty property(object, propertyName, context()); + if (!property.isValid()) + return; + QVariant oldValue = property.read(); if (oldValue.type() == QVariant::Url) { QUrl url = oldValue.toUrl(); diff --git a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp index eb9ad087de2..84c9464ef76 100644 --- a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp +++ b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp @@ -509,6 +509,9 @@ QPair<QString, NodeInstance> QmlGraphicsItemNodeInstance::anchor(const QString & targetObject = qmlGraphicsItem()->anchors()->centerIn(); } else { QDeclarativeProperty metaProperty(object(), name, context()); + if (!metaProperty.isValid()) + return GraphicsObjectNodeInstance::anchor(name); + QDeclarativeAnchorLine anchorLine = metaProperty.read().value<QDeclarativeAnchorLine>(); if (anchorLine.anchorLine != QDeclarativeAnchorLine::Invalid) { targetObject = anchorLine.item; -- GitLab