/*! Returns the value of the \a name property for this context as a QVariant. */ QVariant QQmlContext::contextProperty(const QString &name) const { Q_D(const QQmlContext); QVariant value; int idx = -1; QQmlContextData *data = d->data; const QV4::IdentifierHash<int> &properties = data->propertyNames(); if (properties.count()) idx = properties.value(name); if (idx == -1) { if (data->contextObject) { QObject *obj = data->contextObject; QQmlPropertyData local; QQmlPropertyData *property = QQmlPropertyCache::property(data->engine, obj, name, data, local); if (property) value = obj->metaObject()->property(property->coreIndex()).read(obj); } if (!value.isValid() && parentContext()) value = parentContext()->contextProperty(name); } else { if (idx >= d->propertyValues.count()) value = QVariant::fromValue(data->idValues[idx - d->propertyValues.count()].data()); else value = d->propertyValues[idx]; } return value; }
/*! Constructs a QQmlListReference for \a object's \a property. If \a property is not a list property, an invalid QQmlListReference is created. If \a object is destroyed after the reference is constructed, it will automatically become invalid. That is, it is safe to hold QQmlListReference instances even after \a object is deleted. Passing \a engine is required to access some QML created list properties. If in doubt, and an engine is available, pass it. */ QQmlListReference::QQmlListReference(QObject *object, const char *property, QQmlEngine *engine) : d(0) { if (!object || !property) return; QQmlPropertyData local; QQmlPropertyData *data = QQmlPropertyCache::property(engine, object, QLatin1String(property), 0, local); if (!data || !data->isQList()) return; QQmlEnginePrivate *p = engine?QQmlEnginePrivate::get(engine):0; int listType = p?p->listType(data->propType()):QQmlMetaType::listType(data->propType()); if (listType == -1) return; d = new QQmlListReferencePrivate; d->object = object; d->elementType = p ? p->rawMetaObjectForType(listType) : QQmlMetaType::qmlType(listType).baseMetaObject(); d->propertyType = data->propType(); void *args[] = { &d->property, 0 }; QMetaObject::metacall(object, QMetaObject::ReadProperty, data->coreIndex(), args); }