<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[FreeCAD (Qt 6.11 Widgets, JSPI, wasm64) running in the browser]]></title><description><![CDATA[<p dir="auto">FreeCAD 1.1.3 with its Qt Widgets UI, compiled with Qt 6.11.2 for WebAssembly built from source with -feature-wasm-exceptions -feature-wasm-jspi, threaded, targeting wasm64-emscripten. <a href="https://freecad.virtastic.app" target="_blank" rel="noopener noreferrer nofollow ugc">https://freecad.virtastic.app</a></p>
<p dir="auto">Two Qt-specific things worth knowing if you run a large Widgets app under JSPI:</p>
<ol>
<li>QtEventListener in qstdweb.cpp is not a promising entry point, so QDialog::exec from a real DOM event throws SuspendError while the same call from a promising export works. We replace the listener with one that dispatches through a promising export.</li>
<li>Qt-wasm only focuses its hidden input element for text widgets, so with anything else focused keydown never reaches Qt. We forward trusted key events to the canvas.</li>
</ol>
<p dir="auto">Both patches, with the measurements that found them: <a href="https://virtastic.app/blog/freecad-web-wasm64-runtime/" target="_blank" rel="noopener noreferrer nofollow ugc">https://virtastic.app/blog/freecad-web-wasm64-runtime/</a></p>
<p dir="auto">Source (LGPL): <a href="https://github.com/Virtastic/freecad-web" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/Virtastic/freecad-web</a><br />
Two and a half minutes of it running: <a href="https://youtu.be/LJs-75_wSMI" target="_blank" rel="noopener noreferrer nofollow ugc">https://youtu.be/LJs-75_wSMI</a></p>
]]></description><link>https://forum.qt.io/topic/165107/freecad-qt-6.11-widgets-jspi-wasm64-running-in-the-browser</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 11:31:17 GMT</lastBuildDate><atom:link href="https://forum.qt.io/topic/165107.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Sep 2026 16:36:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to FreeCAD (Qt 6.11 Widgets, JSPI, wasm64) running in the browser on Tue, 22 Sep 2026 18:29:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/virtastic">@<bdi>Virtastic</bdi></a> I can confirm the same issue on macOS with Firefox 155.1</p>
]]></description><link>https://forum.qt.io/post/840224</link><guid isPermaLink="true">https://forum.qt.io/post/840224</guid><dc:creator><![CDATA[SGaist]]></dc:creator><pubDate>Tue, 22 Sep 2026 18:29:12 GMT</pubDate></item><item><title><![CDATA[Reply to FreeCAD (Qt 6.11 Widgets, JSPI, wasm64) running in the browser on Tue, 22 Sep 2026 04:11:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/virtastic">@<bdi>Virtastic</bdi></a> Thanks for sharing!</p>
<p dir="auto">It seems to run well on Google Chrome, but on Firefox 156.0 I get spammed with never-ending popups that say, <em>"That operation failed and was stopped (can't convert 123456789 to BigInt). Your document is unchanged -- please report this."</em></p>
<blockquote>
<ol>
<li>QtEventListener in qstdweb.cpp is not a promising entry point, so QDialog::exec from a real DOM event throws SuspendError while the same call from a promising export works.</li>
</ol>
</blockquote>
<p dir="auto">Note: nested event loops are known to be problematic so they are discouraged now. <a href="https://doc.qt.io/qt-6/qdialog.html#exec" target="_blank" rel="noopener noreferrer nofollow ugc">https://doc.qt.io/qt-6/qdialog.html#exec</a> says, <em>"Avoid using this function; instead, use open()."</em></p>
]]></description><link>https://forum.qt.io/post/840221</link><guid isPermaLink="true">https://forum.qt.io/post/840221</guid><dc:creator><![CDATA[JKSH]]></dc:creator><pubDate>Tue, 22 Sep 2026 04:11:46 GMT</pubDate></item></channel></rss>