QObject *QFAppDispatcher::singletonObject(QQmlEngine *engine, QString package, int versionMajor, int versionMinor, QString typeName) { QString pattern = "import QtQuick 2.0\nimport %1 %2.%3;QtObject { property var object : %4 }"; QString qml = pattern.arg(package).arg(versionMajor).arg(versionMinor).arg(typeName); QObject* holder = 0; QQmlComponent comp (engine); comp.setData(qml.toUtf8(),QUrl()); holder = comp.create(); if (!holder) { qWarning() << QString("QuickFlux: Failed to gain singleton object: %1").arg(typeName); qWarning() << QString("Error: ") << comp.errorString(); return 0; } QObject*object = holder->property("object").value<QObject*>(); holder->deleteLater(); if (!object) { qWarning() << QString("QuickFlux: Failed to gain singleton object: %1").arg(typeName); qWarning() << QString("Error: Unknown"); } return object; }
QObject *ObjectNodeInstance::createComponentWrap(const QString &nodeSource, const QByteArray &importCode, QQmlContext *context) { QmlPrivateGate::ComponentCompleteDisabler disableComponentComplete; Q_UNUSED(disableComponentComplete) QQmlComponent *component = new QQmlComponent(context->engine()); QByteArray data(nodeSource.toUtf8()); data.prepend(importCode); component->setData(data, context->baseUrl().resolved(QUrl("createComponent.qml"))); QObject *object = component; QmlPrivateGate::tweakObjects(object); QQmlEngine::setContextForObject(object, context); QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership); if (component->isError()) { qWarning() << "Error in:" << Q_FUNC_INFO << component->url().toString(); foreach (const QQmlError &error, component->errors()) qWarning() << error; qWarning() << "file data:\n" << data; }