void QQuickLoaderPrivate::incubatorStateChanged(QQmlIncubator::Status status) { Q_Q(QQuickLoader); if (status == QQmlIncubator::Loading || status == QQmlIncubator::Null) return; if (status == QQmlIncubator::Ready) { object = incubator->object(); item = qmlobject_cast<QQuickItem*>(object); emit q->itemChanged(); initResize(); incubator->clear(); } else if (status == QQmlIncubator::Error) { if (!incubator->errors().isEmpty()) QQmlEnginePrivate::warning(qmlEngine(q), incubator->errors()); delete itemContext; itemContext = 0; delete incubator->object(); source = QUrl(); emit q->itemChanged(); } if (loadingFromSource) emit q->sourceChanged(); else emit q->sourceComponentChanged(); emit q->statusChanged(); emit q->progressChanged(); if (status == QQmlIncubator::Ready) emit q->loaded(); disposeInitialPropertyValues(); // cleanup }
void QDeclarativeLoaderPrivate::_q_sourceLoaded() { Q_Q(QDeclarativeLoader); if (component) { if (!component->errors().isEmpty()) { QDeclarativeEnginePrivate::warning(qmlEngine(q), component->errors()); emit q->sourceChanged(); emit q->statusChanged(); emit q->progressChanged(); return; } QDeclarativeContext *creationContext = component->creationContext(); if (!creationContext) creationContext = qmlContext(q); QDeclarativeContext *ctxt = new QDeclarativeContext(creationContext); ctxt->setContextObject(q); QDeclarativeGuard<QDeclarativeComponent> c = component; QObject *obj = component->beginCreate(ctxt); if (component != c) { // component->create could trigger a change in source that causes // component to be set to something else. In that case we just // need to cleanup. if (c) c->completeCreate(); delete obj; delete ctxt; return; } if (obj) { item = qobject_cast<QGraphicsObject *>(obj); if (item) { QDeclarative_setParent_noEvent(ctxt, obj); QDeclarative_setParent_noEvent(item, q); item->setParentItem(q); // item->setFocus(true); initResize(); } else { qmlInfo(q) << QDeclarativeLoader::tr("Loader does not support loading non-visual elements."); delete obj; delete ctxt; } } else { if (!component->errors().isEmpty()) QDeclarativeEnginePrivate::warning(qmlEngine(q), component->errors()); delete obj; delete ctxt; source = QUrl(); } component->completeCreate(); emit q->sourceChanged(); emit q->statusChanged(); emit q->progressChanged(); emit q->itemChanged(); emit q->loaded(); } }