From 0aecc6ad160056c7af291632946d3d4181da4fca Mon Sep 17 00:00:00 2001
From: Morten Sorvig <morten.sorvig@qt.io>
Date: Mon, 22 Jan 2024 15:47:57 +0000
Subject: [PATCH] QDS-11148 - Qt6.6 integration

---
 README.md                |  78 ++++++----------
 cicd/gitlab-ci.yml       |   5 +-
 cicd/stages/build.yml    |  51 ++++-------
 cicd/stages/release.yml  |   2 +-
 cicd/stages/trigger.yml  |   2 +-
 resources/dvicon-new.png | Bin 0 -> 39926 bytes
 src/designviewer.cpp     | 193 +++++++++++++--------------------------
 src/designviewer.h       |   2 +
 www/index.html           |   6 +-
 www/scripts/script.js    |  93 +++++++++----------
 10 files changed, 162 insertions(+), 270 deletions(-)
 create mode 100644 resources/dvicon-new.png

diff --git a/README.md b/README.md
index 249afcf..b2e0988 100644
--- a/README.md
+++ b/README.md
@@ -8,62 +8,19 @@ Qt Design Viewer works in a variety of web browsers which support WebAssembly, o
 ## Prerequisites
 
 * CMake 3.16 or newer
-* Android
-    * Qt6.5.0 or newer
-    * OpenSSL (<https://github.com/KDAB/android_openssl>)
-    * Android SDK and NDK (<https://developer.android.com/studio>)
 * WebAssembly
     * Qt6.4.3 or newer
     * EMSDK (<https://emscripten.org/docs/getting_started/downloads.html>)
 
 ## Building
 
-Build instructions are provided for Linux, macOS hosts and for Android and WebAssembly targets. Windows should work as well but is not tested.
-> Note:
+> Note 1:
+> Build instructions are provided for Linux, macOS hosts and for WebAssembly target. Windows should work as well but is not tested.
+>
+> Note 2:
 > If you're building in a Docker container and you've mounted the source directory into the container, you may need to change the build path pointing out somewhere out of the source directory. Otherwise you may get errors like the following;
 > `CMake Error at /opt/qt-v.6.5.0/android-arm64-v8a/lib/cmake/Qt6/QtSyncQtHelpers.cmake:235 (message): syncqt.cpp failed for module QtQuickStudioApplication: Unable to remove file ...`
 
-### Android
-
-> Note:
-> Android build instructions can also be used on desktop (or host) for testing purposes. Just replace the `CMAKE_TOOLCHAIN_FILE` path with the path to your Qt host installation.
-
-First build and install QtQuickDesigner Components for Android:
-
-```bash
-cd qtquickdesigner-components
-cmake \
-    -S . \
-    -B build \
-    -G Ninja \
-    -DCMAKE_TOOLCHAIN_FILE=<qt-android-path>/lib/cmake/Qt6/qt.toolchain.cmake \
-    -DCMAKE_INSTALL_PREFIX=<qt-android-path> \
-    -DANDROID_SDK_ROOT=<android-sdk-path> \
-    -DANDROID_NDK_ROOT=<android-sdk-path>/ndk/<ndk-version> \
-    -DANDROID_OPENSSL_PATH=<openssl-path>
-
-cmake --build build
-cmake --install build
-cd ..
-```
-
-Then build the Qt Design Viewer:
-
-```bash
-cmake \
-    -S . \
-    -B build \
-    -G Ninja \
-    -DCMAKE_TOOLCHAIN_FILE=<qt-android-path>/lib/cmake/Qt6/qt.toolchain.cmake \
-    -DANDROID_SDK_ROOT=<android-sdk-path> \
-    -DANDROID_NDK_ROOT=<android-sdk-path>/ndk/<ndk-version> \
-    -DANDROID_OPENSSL_PATH=<openssl-path>
-
-cmake --build build
-```
-
-### WebAssembly
-
 First activate the correct EMSDK version:
 
 ```bash
@@ -82,8 +39,9 @@ cmake \
     -S . \
     -B build \
     -G Ninja \
-    -DCMAKE_TOOLCHAIN_FILE=<qt-wasm-path>/wasm/lib/cmake/Qt6/qt.toolchain.cmake \
-    -DCMAKE_INSTALL_PREFIX=<qt-wasm-path>
+    -DCMAKE_PREFIX_PATH=<qt-wasm-path> \
+    -DCMAKE_INSTALL_PREFIX=<qt-wasm-path> \
+    -DCMAKE_TOOLCHAIN_FILE=<qt-wasm-path>/wasm/lib/cmake/Qt6/qt.toolchain.cmake
 
 cmake --build build
 cmake --install build
@@ -97,11 +55,33 @@ cmake \
     -S . \
     -B build \
     -G Ninja \
+    -DCMAKE_PREFIX_PATH=<qt-wasm-path> \
+    -DCMAKE_INSTALL_PREFIX=build/install \
     -DCMAKE_TOOLCHAIN_FILE=<qt-wasm-path>/wasm/lib/cmake/Qt6/qt.toolchain.cmake
 
 cmake --build build
+cmake --install build
+```
+
+## Running
+
+You can use 'qtwasmserver' package to run the Qt Design Viewer:
+
+To install the package:
+
+```bash
+python -m pip install qtwasmserver
 ```
 
+And then run the server:
+
+```bash
+cd build/install
+qtwasmserver .
+```
+
+Then open <http://localhost:8000> in Your web browser.
+
 ## Usage
 
 Compress Your Qml project as a _.zip_ file, ideally including a _.qmlproject_ file. Or use the _Build -> Generate Resource File_ feature of Qt Design Studio 1.3+ to pack Your project in a _.qmlrc_ file.
diff --git a/cicd/gitlab-ci.yml b/cicd/gitlab-ci.yml
index 33058bb..1299a52 100644
--- a/cicd/gitlab-ci.yml
+++ b/cicd/gitlab-ci.yml
@@ -1,9 +1,6 @@
 variables:
   QDS_CI_QT_VERSION:
-    value: "643"
-    options:
-      - "643"
-      - "652"
+    value: "6.6.1"
     description: "Qt version for build"
   QDS_CI_ARTIFACTS_PATH: "${CI_PROJECT_DIR}/artifacts"
   DEBIAN_FRONTEND: non-interactive
diff --git a/cicd/stages/build.yml b/cicd/stages/build.yml
index fbcdc4d..d8a7abe 100644
--- a/cicd/stages/build.yml
+++ b/cicd/stages/build.yml
@@ -1,27 +1,14 @@
 # QDS_CI_BUILD_QT_VERSION_ANDROID and QDS_CI_BUILD_QT_VERSION_WASM are the tags for the docker images.
 # https://git.qt.io/design-studio/maintenance/docker-images/container_registry
-
-.build-base:
-  rules:
-    - if: $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web"
-
-build-wasm-multiarch:
+build-wasm:
   stage: build
-  extends: .build-base
   tags:
     - linux-blade
   rules:
-    - if: $QDS_CI_QT_VERSION == "643" && $QDS_CI_JOB_TARGET_ARCH == "32"
-    - if: $QDS_CI_QT_VERSION != "643" && $QDS_CI_JOB_TARGET_ARCH == "singlethread"
-    - if: $QDS_CI_QT_VERSION != "643" && $QDS_CI_JOB_TARGET_ARCH == "multithread"
-  parallel:
-    matrix:
-      - QDS_CI_JOB_TARGET_ARCH:
-        - "32"
-        - "singlethread"
-        - "multithread"
+    - if: $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "merge_request_event"
   variables:
-    QDS_BUILD_PATH: "${CI_PROJECT_DIR}/outdir/build"
+    QDS_CI_BUILD_PATH: "${CI_PROJECT_DIR}/outdir/build"
+    QDS_CI_JOB_TARGET_ARCH: "singlethread"
     QDS_CI_JOB_TARGET_PLATFORM: "wasm"
     QDS_CI_JOB_ARTIFACTS_PATH: ${QDS_CI_ARTIFACTS_PATH}/${QDS_CI_JOB_TARGET_PLATFORM}/${QDS_CI_JOB_TARGET_ARCH}
   artifacts:
@@ -31,46 +18,42 @@ build-wasm-multiarch:
       - ${QDS_CI_ARTIFACTS_PATH}
     reports:
       dotenv: build.env
-  image: "git.qt.io:4567/design-studio/maintenance/docker-images/${QDS_CI_JOB_TARGET_PLATFORM}:${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}"
+  image: "git.qt.io:4567/design-studio/maintenance/docker-images/qt-full:${QDS_CI_QT_VERSION}"
   script:
     - mkdir -p ${QDS_CI_JOB_ARTIFACTS_PATH}
-    - |
-      if [[ ${QDS_CI_QT_VERSION} == "643" ]]; then
-        EMSDK_VERSION="3.1.14"
-      elif [[ ${QDS_CI_QT_VERSION} == "652" ]]; then
-        EMSDK_VERSION="3.1.25"
-      fi
     - |
       cd emsdk
-      ./emsdk install ${EMSDK_VERSION}
-      ./emsdk activate ${EMSDK_VERSION}
+      ./emsdk install 3.1.37
+      ./emsdk activate 3.1.37
       source emsdk_env.sh
       cd ..
+    - echo ${DOCKER_ENV_QT_PATH_WASM_SINGLETHREAD}
+    - echo ${DOCKER_ENV_QT_PATH_LINUX_GCC_64}
     - |
       cd qtquickdesigner-components
       cmake \
       -S . \
       -G Ninja \
-      -DCMAKE_TOOLCHAIN_FILE=${QT_PATH}/${QT_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}/lib/cmake/Qt6/qt.toolchain.cmake \
-      -DQT_HOST_PATH=${QT_PATH}/${QT_VERSION}/gcc_64 \
+      -DCMAKE_TOOLCHAIN_FILE=${DOCKER_ENV_QT_PATH_WASM_SINGLETHREAD}/lib/cmake/Qt6/qt.toolchain.cmake \
+      -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \
       -DCMAKE_C_COMPILER=${EMSDK}/upstream/emscripten/emcc  \
       -DCMAKE_CXX_COMPILER=${EMSDK}/upstream/emscripten/em++ \
-      -DCMAKE_INSTALL_PREFIX=${QT_PATH}/${QT_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}
+      -DCMAKE_INSTALL_PREFIX=${DOCKER_ENV_QT_PATH_WASM_SINGLETHREAD}
     - cmake --build .
     - cmake --install .
     - cd ..
     - |
       cmake \
       -S . \
-      -B ${QDS_BUILD_PATH} \
+      -B ${QDS_CI_BUILD_PATH} \
       -G Ninja \
       -DCMAKE_BUILD_TYPE=Debug \
-      -DCMAKE_TOOLCHAIN_FILE=${QT_PATH}/${QT_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}/lib/cmake/Qt6/qt.toolchain.cmake \
-      -DQT_HOST_PATH=${QT_PATH}/${QT_VERSION}/gcc_64 \
+      -DCMAKE_TOOLCHAIN_FILE=${DOCKER_ENV_QT_PATH_WASM_SINGLETHREAD}/lib/cmake/Qt6/qt.toolchain.cmake \
+      -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \
       -DCMAKE_C_COMPILER=${EMSDK}/upstream/emscripten/emcc  \
       -DCMAKE_CXX_COMPILER=${EMSDK}/upstream/emscripten/em++ \
       -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_ARTIFACTS_PATH}
-    - cmake --build ${QDS_BUILD_PATH}
-    - cmake --install ${QDS_BUILD_PATH}
+    - cmake --build ${QDS_CI_BUILD_PATH}
+    - cmake --install ${QDS_CI_BUILD_PATH}
     - echo "PREVIOUS_JOB_ID=${CI_JOB_ID}" >> build.env
     - echo "JOB_TARGET_ARCH=${QDS_CI_JOB_TARGET_ARCH}" >> build.env
diff --git a/cicd/stages/release.yml b/cicd/stages/release.yml
index 0eda911..7f652bb 100644
--- a/cicd/stages/release.yml
+++ b/cicd/stages/release.yml
@@ -6,7 +6,7 @@ create-packages:
   rules:
     - if: $CI_COMMIT_TAG
   needs:
-    - job: build-wasm-multiarch
+    - job: build-wasm
       optional: true
       artifacts: true
   variables:
diff --git a/cicd/stages/trigger.yml b/cicd/stages/trigger.yml
index c01011c..b097b13 100644
--- a/cicd/stages/trigger.yml
+++ b/cicd/stages/trigger.yml
@@ -6,7 +6,7 @@
     QDS_CI_PARENT_PROJECT_ID: ${CI_PROJECT_ID}
     QDS_CI_PARENT_PIPELINE_ARCH: ${JOB_TARGET_ARCH}
   needs:
-    - job: build-wasm-multiarch
+    - job: build-wasm
       artifacts: true
       optional: true
   trigger:
diff --git a/resources/dvicon-new.png b/resources/dvicon-new.png
new file mode 100644
index 0000000000000000000000000000000000000000..554b5eee2046e491e36ea9c489a20fa602b72bd7
GIT binary patch
literal 39926
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
VF`Fx|MuIWWQInHL$__h5{0r8`Yt;Y%

literal 0
HcmV?d00001

diff --git a/src/designviewer.cpp b/src/designviewer.cpp
index f9cd839..7eb3fe6 100644
--- a/src/designviewer.cpp
+++ b/src/designviewer.cpp
@@ -24,9 +24,9 @@
 ****************************************************************************/
 
 #include "designviewer.h"
-#if defined(Q_OS_WASM)
 
 #include <emscripten.h>
+#include <emscripten/val.h>
 #include <functional>
 
 #include <QBuffer>
@@ -38,7 +38,13 @@
 #include <QResource>
 #include <QTemporaryDir>
 #include <QTemporaryFile>
-#include <private/qzipreader_p.h>
+#include <QTimer>
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
+#include <QtCore/private/qzipreader_p.h>
+#else
+#include <QtGui/private/qzipreader_p.h>
+#endif
 
 #define printErr(x) printError(x, __FILE_NAME__, __LINE__)
 
@@ -56,55 +62,29 @@ extern "C" EMSCRIPTEN_KEEPALIVE void qt_callSetFileData(char *content,
 
 DesignViewer::DesignViewer()
 {
+    printLog("DesignViewer constructor");
     QString projectFileName;
     QByteArray projectData;
+    printLog("Fetching project");
     fetchProject(&projectData, &projectFileName);
-    if (!runProject(projectData, projectFileName))
-        printError("Failed to run project", projectFileName, 0);
+    printLog("Running project");
+    if (!runProject(projectData, projectFileName)) {
+        printErr("Failed to run project");
+    }
+    printLog("DesignViewer constructor done");
 }
 
 void DesignViewer::fetchProject(QByteArray *data, QString *fileName)
 {
-    // Call qt_callSetFileData to make sure the emscripten linker does not
-    // optimize it away, which may happen if the function is called from JavaScript
-    // only. Set g_setFileDataCallback to null to make it a no-op.
-    ::g_setFileDataCallback = nullptr;
-    ::qt_callSetFileData(nullptr, 0, nullptr);
-
-    auto setFileDataCallback =
-        [data, fileName](char *content, size_t contentSize, char *projectFilename)
-    {
-        data->setRawData(content, contentSize);
-        *fileName = QString::fromUtf8(projectFilename);
-    };
-    g_setFileDataCallback = setFileDataCallback;
-
-    EM_ASM_({
-        // Copy the file file content to the C++ heap.
-        // Note: this could be simplified by passing the content as an
-        // "array" type to ccall and then let it copy to C++ memory.
-        // However, this built-in solution does not handle files larger
-        // than ~15M (Chrome). Instead, allocate memory manually and
-        // pass a pointer to the C++ side (which will free() it when done).
-
-        // TODO: consider slice()ing the file to read it picewise and
-        // then assembling it in a QByteArray on the C++ side.
-
-        const contentSize = contentArray.byteLength;
-        const heapPointer = _malloc(contentSize);
-        const heapBytes = new Uint8Array(Module.HEAPU8.buffer, heapPointer, contentSize);
-        heapBytes.set(contentArray);
-
-        // Null out the first data copy to enable GC
-        reader = null;
-        contentArray = null;
-
-        // Call the C++ file data ready callback
-        ccall("qt_callSetFileData",
-              null,
-              [ "number", "number", "string" ],
-              [ heapPointer, contentSize, projectfileName ]);
-    });
+    printLog("Init project data");
+    // Access global variables set by index.html
+    emscripten::val jsData = emscripten::val::global("contentArray");
+    emscripten::val jsFileName = emscripten::val::global("projectfileName");
+
+    printLog("Copying project data");
+    // Copy project data to the C++ heap and convert string
+    *data = QByteArray::fromEcmaUint8Array(jsData);
+    *fileName = QString::fromStdString(jsFileName.as<std::string>());
 }
 
 QString DesignViewer::unpackProject(const QByteArray &project, bool extractZip)
@@ -163,84 +143,7 @@ QString DesignViewer::unpackProject(const QByteArray &project, bool extractZip)
         projectLocation = ":" + resourcePath;
     }
 
-    // create a temporary directory and copy the project there
-    QTemporaryDir tempDir;
-    tempDir.setAutoRemove(false);
-    if (!tempDir.isValid()) {
-        printErr("Could not create a temporary directory.");
-        return "";
-    }
-
-    const QString tempDirPath = tempDir.path();
-    printLog("Temporary directory: " + tempDirPath);
-
-    QDir tempDirDir(tempDirPath);
-    if (!tempDirDir.exists()) {
-        printErr("Temporary directory does not exist.");
-        return "";
-    }
-
-    if (!QDir(projectLocation).exists()) {
-        printErr("Project directory does not exist.");
-        return "";
-    }
-
-    // copy all files and directories from projectLocation to tempDirPath
-    QDirIterator it(projectLocation,
-                    QDir::AllEntries | QDir::NoDotAndDotDot,
-                    QDirIterator::Subdirectories);
-    printLog("Files in project location: " + projectLocation);
-    while (it.hasNext()) {
-        const QString filePath = it.next();
-        printLog("Found file: " + filePath);
-        const QFileInfo fileInfo(filePath);
-        const QString relativeFilePath = fileInfo.filePath().remove(projectLocation);
-        const QString newFilePath = tempDirPath + relativeFilePath;
-        printLog("Copying file: " + filePath + " to " + newFilePath);
-        if (fileInfo.isDir()) {
-            QDir().mkpath(newFilePath);
-        } else if (!QFile::copy(filePath, newFilePath)) {
-            printErr("Could not copy file: " + filePath + " to " + newFilePath);
-            return "";
-        }
-    }
-
-    // find all .qml files in the temporary directory and remove the Qt versions from 6.5 to 6.9
-    // at the end of the import statements. example "import <modulename> 6.5" -> "import <modulename>"
-    QDirIterator it2(tempDirPath, {"*.qml"}, QDir::Files, QDirIterator::Subdirectories);
-
-    printLog("Files in temporary directory: " + tempDirPath);
-    while (it2.hasNext()) {
-        const QString filePath = it2.next();
-        QFile file(filePath);
-        // set file permissions to read and write
-        file.setPermissions(QFile::ReadOwner | QFile::WriteOwner);
-        if (!file.open(QIODevice::ReadWrite)) {
-            printErr("Could not open file: " + filePath);
-            return "";
-        }
-
-        const QRegularExpression importRegExp("import\\s+\\S+\\s+6\\.[5-9]");
-        QString content = QString::fromUtf8(file.readAll());
-        while (content.contains(importRegExp)) {
-            const QRegularExpressionMatch match = importRegExp.match(content);
-            const QStringList textList = match.capturedTexts();
-
-            for (const QString &text : textList) {
-                const QString newText = QString(text).remove(QRegularExpression("\\s+6\\.[5-9]"));
-                printLog("Found text to replace: " + text + " with " + newText + " in file "
-                         + filePath);
-                content.replace(text, newText);
-            }
-        }
-
-        file.resize(0);
-        file.write(content.toUtf8());
-        file.close();
-    }
-
-    // return the temporary directory path
-    return tempDirPath;
+    return projectLocation;
 }
 
 QString DesignViewer::findFile(const QString &dir, const QString &filter)
@@ -354,7 +257,7 @@ bool DesignViewer::runProject(const QByteArray &projectData, const QString &proj
     printLog("Found mainQmlFile: " + mainQmlFilePath);
 
     QUrl mainQmlUrl = QUrl::fromUserInput(mainQmlFilePath);
-    QFile file(mainQmlUrl.path());
+    QFile file(mainQmlUrl.path().prepend(":"));
     if (!file.open(QIODevice::ReadOnly)) {
         printErr("Could not open mainQmlfile for reading! " + file.fileName() + ": " + file.errorString());
         return false;
@@ -450,21 +353,53 @@ void DesignViewer::printWarn(const QString &message)
 
 void DesignViewer::printError(const QString &message, const QString &fileName, int line)
 {
+    fprintf(stderr, "ERROR:%s\n", qPrintable(message));
     QString escaped = message;
     escaped.replace("'", "\'");
     escaped.replace("\n", "\\n");
-    emscripten_run_script("alert('" + escaped.toUtf8() + "');");
-    emscripten_run_script("location.hash = ''; location.reload();");
+    emscripten::val location = emscripten::val::global("window")["location"];
+    location.set("hash", std::string());
+    location.call<void>("reload");
 }
 
 void DesignViewer::showAppWindow()
 {
     printLog("Resizing the QML app window");
     const QSize size;
-    const QString command = QString::fromLatin1("setScreenSize(%1, %2);").arg(size.width()).arg(size.height());
-    emscripten_run_script(command.toUtf8());
+
+    printLog("Getting the QML app window container");
+    emscripten::val qtContainer = emscripten::val::global("qtcontainer"); // global from index.html
+    printLog("Getting the QML app window style");
+    emscripten::val qtContainerStyle = qtContainer["style"];
+
+    printLog("Setting the QML app window size");
+    if (size.isEmpty()) {
+        printLog("Setting the QML app window size to 100%");
+        qtContainerStyle.set("width", std::string("100%"));
+        // qtContainerStyle.set("height",
+        //                      std::string(
+        //                          "100%")); // ### FIXME: 100% height gives 0px height for some reason
+    } else {
+        printLog("Setting the QML app window size to "
+                 + QString("%1x%2").arg(size.width()).arg(size.height()));
+        qtContainerStyle.set("width", QString("%1px").arg(size.width()).toStdString());
+        qtContainerStyle.set("height", QString("%1px").arg(size.height()).toStdString());
+    }
+
+    printLog("Setting the QML app window position");
+
+    // Make Qt pick up the new container size by calling the resizeCanvasElement()
+    // qtloader API. This needs to be done on delay after initial setup to make
+    // sure qtloader is initialized.
+    // QTimer::singleShot(0, [&]() {
+    //     emscripten::val instance = emscripten::val::global("instance");
+    //     if (instance.isNull()) {
+    //         printErr("instance is null");
+    //         return;
+    //     }
+    //     instance.call<void>("qtResizeContainerElement", qtContainer);
+    //     printLog("QML app window position set");
+    // });
     printLog("Showing the QML app window");
     m_quickWindow->show();
 }
-
-#endif // Q_OS_WASM
diff --git a/src/designviewer.h b/src/designviewer.h
index f7f28c9..1736277 100644
--- a/src/designviewer.h
+++ b/src/designviewer.h
@@ -47,6 +47,8 @@ private:
     QQmlEngine m_qmlEngine;
     QQmlComponent m_qmlComponent{&m_qmlEngine};
 
+    QWidget *m_appWindow = nullptr;
+
     void printLog(const QString &message);
     void printWarn(const QString &message);
     void printError(const QString &message, const QString &fileName, int line);
diff --git a/www/index.html b/www/index.html
index f632168..962aba2 100644
--- a/www/index.html
+++ b/www/index.html
@@ -61,6 +61,7 @@
         >
       </center>
     </figure>
+    <div id="qtcontainer"></div>
 
     <div id="dropzone">
       <div id="instruction">Drop your qmlrc file or zip file here</div>
@@ -119,9 +120,10 @@
     </div>
 
     <canvas
-      id="qtcanvas"
+      id="canvas"
       oncontextmenu="event.preventDefault()"
       contenteditable="true"
+      style="display: none"
     ></canvas>
     <div id="footer">
       <div id="alertBox" class="alert">
@@ -148,7 +150,7 @@
       </p>
       <p id="versioninfo_main">Version: 1.0.0</p>
     </div>
-
+    <script src="qtdesignviewer.js"></script>
     <script src="scripts/script.js" type="text/javascript"></script>
     <script src="qtloader.js" type="text/javascript"></script>
   </body>
diff --git a/www/scripts/script.js b/www/scripts/script.js
index 25576da..4f3e9e6 100644
--- a/www/scripts/script.js
+++ b/www/scripts/script.js
@@ -1,8 +1,8 @@
 var contentArray;
 var projectfileName;
 var reader;
-var spinner = document.querySelector("#qtspinner");
-var canvas = document.querySelector("#qtcanvas");
+
+var canvas = document.querySelector("#canvas");
 var uploadform = document.querySelector("#uploadform");
 var fileinput = document.querySelector("#fileinput");
 var dropzone = document.querySelector("#dropzone");
@@ -17,8 +17,8 @@ var alertBox = document.querySelector("#alertBox");
 var passwordDialog = document.querySelector("#passwordDialog");
 var alertText = document.querySelector("#alertText");
 var passwordInput = document.querySelector("#passwordInput");
-var qtLoader;
 var versionInfo = undefined;
+var instance;
 
 function showAlert(text) {
     alertText.innerHTML = text;
@@ -206,63 +206,56 @@ function init() {
     };
 }
 
-function restart() {
-    qtLoader.loadEmscriptenModule("qtdesignviewer");
-}
-
-function loadProjector() {
-    qtLoader = QtLoader({
-        canvasElements: [canvas],
-        showLoader: function (loaderStatus) {
-            spinner.style.display = "block";
-            canvas.style.display = "none";
-            if (loaderStatus === "Downloading/Compiling")
-                loaderStatus = "Starting";
-            launchstatustext.innerHTML = loaderStatus;
-        },
-        showError: function (errorText) {
-            launchstatustext.innerHTML = errorText;
-            spinner.style.display = "block";
-            canvas.style.display = "none";
-        },
-        showExit: function () {
-            launchstatustext.innerHTML = "Application exit";
-            if (qtLoader.exitCode !== undefined)
-                launchstatustext.innerHTML += " with code " + qtLoader.exitCode;
-            if (qtLoader.exitText !== undefined)
-                launchstatustext.innerHTML += " (" + qtLoader.exitText + ")";
-            spinner.style.display = "block";
-            canvas.style.display = "none";
-        },
-        showCanvas: function () {
-            spinner.style.display = "none";
-            canvas.style.display = "block";
-            launchstatus.style.display = "none";
-            appheader.style.display = "block";
-        },
-    });
+async function loadProjector() {
+    const spinner = document.querySelector("#qtspinner");
+    const container = document.querySelector('#qtcontainer');
+    const status = document.querySelector('#qtstatus');
 
-    // workaround for making sure that self.module is set up before
-    // running setScreenSize
-    self.moduleConfig.preRun = [];
-    self.moduleConfig.preRun.push(function (module) {
-        self.module = module;
-    });
+    const showUi = (ui) => {
+        [spinner, container].forEach(element => element.style.display = 'none');
+        if (container === ui)
+            container.style.position = 'default';
+        ui.style.display = 'block';
+    }
 
-    qtLoader.loadEmscriptenModule("qtdesignviewer");
+    try {
+        showUi(spinner);
+        status.innerHTML = 'Loading...';
+        instance = await qtLoad({
+            qt: {
+                onLoaded: () => {
+                    setContainerSize(container, window.innerWidth, window.innerHeight);
+                    showUi(container);
+                },
+                onExit: exitData => {
+                    console.log("onExit");
+                    status.innerHTML = 'Application exit';
+                    status.innerHTML +=
+                        exitData.code !== undefined ? ` with code ` : '';
+                    status.innerHTML +=
+                        exitData.text !== undefined ? ` ()` : '';
+                    showUi(spinner);
+                },
+                entryFunction: window.createQtAppInstance,
+                containerElements: [container]
+            }
+        });
+    } catch (e) {
+        console.error(e);
+        console.error(e.stack);
+    }
 }
 
-function setScreenSize(width, height) {
+function setContainerSize(container, width, height) {
     if (width > 1 && height > 1) {
-        canvas.style.width = `${width}px`;
-        canvas.style.height = `${height}px`;
+        container.style.width = `${width}px`;
+        container.style.height = `${height}px`;
     } else {
         // undefined root size
-        canvas.style.width = canvas.style.height = "100%";
+        container.style.width = container.style.height = "100%";
         document.documentElement.style.height = document.body.style.height =
             "100%";
         document.documentElement.style.overflow =
             document.body.style.overflow = "hidden";
     }
-    qtLoader.resizeCanvasElement(canvas);
 }
-- 
GitLab