forked from qt-creator/qt-creator
Support for QQmlVMEMetaObject and QmlPropertyCache
We have to derive NodeInstanceMetaObject from QQmlVMEMetaObject to support e. g. alias properties. The QmlEngine uses QQmlVMEMetaObject to resolve alias properties. Also we have to invalidate/recreate the QmlPropertyCache if we add dynamic properties. Change-Id: Id52dd8b380eadeb6f74b5171168f2f70c16be118 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
@@ -130,14 +130,15 @@ static bool hasPropertiesWitoutNotifications(const QMetaObject *metaObject)
|
||||
void ObjectNodeInstance::initializePropertyWatcher(const ObjectNodeInstance::Pointer &objectNodeInstance)
|
||||
{
|
||||
const QMetaObject *metaObject = objectNodeInstance->object()->metaObject();
|
||||
m_metaObject = new NodeInstanceMetaObject(objectNodeInstance, nodeInstanceServer()->engine());
|
||||
QQmlEnginePrivate::get(engine())->cache(m_metaObject);
|
||||
m_metaObject = NodeInstanceMetaObject::createNodeInstanceMetaObject(objectNodeInstance, nodeInstanceServer()->engine());
|
||||
for (int propertyIndex = QObject::staticMetaObject.propertyCount(); propertyIndex < metaObject->propertyCount(); propertyIndex++) {
|
||||
if (QQmlMetaType::isQObject(metaObject->property(propertyIndex).userType())) {
|
||||
QObject *propertyObject = QQmlMetaType::toQObject(metaObject->property(propertyIndex).read(objectNodeInstance->object()));
|
||||
if (propertyObject && hasPropertiesWitoutNotifications(propertyObject->metaObject())) {
|
||||
QMetaObject *childMetaObject = new NodeInstanceMetaObject(objectNodeInstance, propertyObject, metaObject->property(propertyIndex).name(), nodeInstanceServer()->engine());
|
||||
QQmlEnginePrivate::get(engine())->cache(childMetaObject);
|
||||
NodeInstanceMetaObject::createNodeInstanceMetaObject(objectNodeInstance,
|
||||
propertyObject,
|
||||
metaObject->property(propertyIndex).name(),
|
||||
nodeInstanceServer()->engine());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user