QQuickLoader::~QQuickLoader() { Q_D(QQuickLoader); if (d->item) { QQuickItemPrivate *p = QQuickItemPrivate::get(d->item); p->removeItemChangeListener(d, watchedChanges); } }
void QQuickLoader::setActive(bool newVal) { Q_D(QQuickLoader); if (d->active == newVal) return; d->active = newVal; if (newVal == true) { if (d->loadingFromSource) { loadFromSource(); } else { loadFromSourceComponent(); } } else { // cancel any current incubation if (d->incubator) { d->incubator->clear(); delete d->itemContext; d->itemContext = 0; } if (d->item) { QQuickItemPrivate *p = QQuickItemPrivate::get(d->item); p->removeItemChangeListener(d, watchedChanges); // We can't delete immediately because our item may have triggered // the Loader to load a different item. d->item->setParentItem(0); d->item->setVisible(false); d->item = 0; } if (d->object) { d->object->deleteLater(); d->object = 0; emit itemChanged(); } emit statusChanged(); } emit activeChanged(); }
void QQuickLoaderPrivate::clear() { Q_Q(QQuickLoader); disposeInitialPropertyValues(); if (incubator) incubator->clear(); delete itemContext; itemContext = 0; if (loadingFromSource && component) { // disconnect since we deleteLater QObject::disconnect(component, SIGNAL(statusChanged(QQmlComponent::Status)), q, SLOT(_q_sourceLoaded())); QObject::disconnect(component, SIGNAL(progressChanged(qreal)), q, SIGNAL(progressChanged())); component->deleteLater(); component = 0; } componentStrongReference.clear(); source = QUrl(); if (item) { QQuickItemPrivate *p = QQuickItemPrivate::get(item); p->removeItemChangeListener(this, watchedChanges); // We can't delete immediately because our item may have triggered // the Loader to load a different item. item->setParentItem(0); item->setVisible(false); item = 0; } if (object) { object->deleteLater(); object = 0; } }