diff options
Diffstat (limited to 'examples/declarative/loader/main.cpp')
-rw-r--r-- | examples/declarative/loader/main.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/examples/declarative/loader/main.cpp b/examples/declarative/loader/main.cpp new file mode 100644 index 0000000..23125ce --- /dev/null +++ b/examples/declarative/loader/main.cpp @@ -0,0 +1,71 @@ +#include <QApplication> +#include <QUrl> +#include <QFileInfo> +#include <QDir> +#include <QmlContext> +#include <QmlComponent> +#include <qfxview.h> + +QFxView *canvas = 0; + +class QmlLauncher : public QObject +{ + Q_OBJECT +public: + QmlLauncher() {} + + Q_INVOKABLE void launch(const QString &fileName) + { + QUrl url(fileName); + QFileInfo fi(fileName); + if (fi.exists()) { + url = QUrl::fromLocalFile(fi.absoluteFilePath()); + QmlContext *ctxt = canvas->rootContext(); + QDir dir(fi.path()+"/dummydata", "*.qml"); + QStringList list = dir.entryList(); + for (int i = 0; i < list.size(); ++i) { + QString qml = list.at(i); + QFile f(dir.filePath(qml)); + f.open(QIODevice::ReadOnly); + QByteArray data = f.readAll(); + QmlComponent comp(canvas->engine()); + comp.setData(data, QUrl()); + QObject *dummyData = comp.create(); + + if(comp.isError()) { + QList<QmlError> errors = comp.errors(); + foreach (const QmlError &error, errors) { + qWarning() << error; + } + } + + if (dummyData) { + qml.truncate(qml.length()-4); + ctxt->setContextProperty(qml, dummyData); + dummyData->setParent(this); + } + } + } + + canvas->setUrl(fileName); + canvas->execute(); + } +}; + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlLauncher *launcher = new QmlLauncher; + + canvas = new QFxView; + QmlContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("qmlLauncher", launcher); + canvas->setUrl(QUrl("qrc:/loader.qml")); + canvas->execute(); + canvas->show(); + + return app.exec(); +} + +#include "main.moc" |