Skip to content

Repository files navigation

JavaScript powered QML Engine

Join the chat at https://gitter.im/qmlweb/qmlwebBuild Statuscodecov

npmBowerGitHub tag

This project aims at bringing the power of QML to the web browser. Here's a sample of how QML looks like:

importQtQuick2.0Rectangle {
width:500; height:200
color:"lightgray"Text {
id: helloText
text:"Hello world!"anchors.verticalCenter:parent.verticalCenteranchors.horizontalCenter:parent.horizontalCenterfont.pointSize:24; font.bold:true
}
}

How to use

Add the library to your web page

Using one of the methods below, install the qmlweb JavaScript library:

  • npmnpm install qmlweb
  • GitHub releasestar -xaf v0.2.0.tar.gz
  • Manually (recommended if you cloned from git) — npm install && npm run build

Next, simply add lib/qmlweb.js to the list of other JavaScript files in your app's HTML file:

<scripttype="text/javascript" src="/lib/qmlweb.js"></script>

See the examples directory for more details and complete usage examples.

Testing from a local folder

Note that due to security restrictions (which are there to protect you!) browsers do not allow loading arbitrary local files, which includes *.qml.

Because of that, to test the goodness of QmlWeb on your own machine, you have to spin up a local http server, e.g. by running npx http-server.

Or try out qmlweb-viewer.

API

You can use DOM elements as the base for QML components:

vardiv=document.getElementById('embed');// this is your DOM elementvarengine=newQmlWeb.QMLEngine(div);engine.loadFile('qml/main.qml');engine.start();

See also engine.loadQML for constructing a QML element from a source string.

Auto-load

You can modify the <body> element to specify what QML file to load when the page is opened. The loaded QML element will fill the whole page.

<!DOCTYPE html><html><head><title>QML Auto-load Example</title><scripttype="text/javascript" src="/lib/qmlweb.js"></script></head><bodystyle="margin: 0" data-qml="qml/main.qml"></body></html>

Web Components

You can register QML files as Custom Elements.

Note: browser support for Custom Elements v1 is limited, and QmlWeb does not include a polyfill. You might want to load a polyfill manually.

Registering the element:

QmlWeb.registerElement('qml-main','qml/main.qml');

Using the element:

<qml-mainheight="300" color="red" firstName="World"></qml-main>

Top-level properties get exported as HTML attributes and are binded to them, real-time updates are possible.

Supported modules and elements

Approximate modules support status for the git version could be viewed on the Projects page.

You can click on the module cards for per-class details.

How to use with Gulp

See gulp-qmlweb package.

How to extend

See Extending.

Related efforts

That will allow users to run the main Qt process on the server and render on HTML clients through WebGL. Qt WebGL streaming requires one application process on server per each client — only the painting is delegated to the client.

The usecase differs significantly from QmlWeb, as QmlWeb runs all code on the clients, attempting to reuse browser APIs as much as possible to provide better integration. No server-side code is needed, server provides static files.

PureQml aims to implement a language close to original QML, but it does not target 100% compatibility with Qt QML, unlike QmlWeb. They also provide a framework based on their language and target support for a great variety of platforms.

Transplitting all the required Qt/QML libraries to JS/WebAssembley and rendering everything to Canvas provides the best possible compatibility with upstream Qt. That comes at a price, though — the runtime is pretty big, and that approach does not allow to reuse many existing browser APIs and components.

Similar as the above «Qt/QML + Emscripten», but more up to date. Upstream issue: QTBUG-63917.

Examples at https://msorvig.github.io/qt-webassembly-examples/.

About

Prototype of QML engine in a web browser

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - igosoft/qmlweb: Prototype of QML engine in a web browser · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

Join the chat at https://gitter.im/qmlweb/qmlwebBuild Statuscodecov

npmBowerGitHub tag

This project aims at bringing the power of QML to the web browser. Here's a sample of how QML looks like:

importQtQuick2.0Rectangle {
width:500; height:200
color:"lightgray"Text {
id: helloText
text:"Hello world!"anchors.verticalCenter:parent.verticalCenteranchors.horizontalCenter:parent.horizontalCenterfont.pointSize:24; font.bold:true
}
}

How to use

Add the library to your web page

Using one of the methods below, install the qmlweb JavaScript library:

  • npmnpm install qmlweb
  • GitHub releasestar -xaf v0.2.0.tar.gz
  • Manually (recommended if you cloned from git) — npm install && npm run build

Next, simply add lib/qmlweb.js to the list of other JavaScript files in your app's HTML file:

<scripttype="text/javascript" src="/lib/qmlweb.js"></script>

See the examples directory for more details and complete usage examples.

Testing from a local folder

Note that due to security restrictions (which are there to protect you!) browsers do not allow loading arbitrary local files, which includes *.qml.

Because of that, to test the goodness of QmlWeb on your own machine, you have to spin up a local http server, e.g. by running npx http-server.

Or try out qmlweb-viewer.

API

You can use DOM elements as the base for QML components:

vardiv=document.getElementById('embed');// this is your DOM elementvarengine=newQmlWeb.QMLEngine(div);engine.loadFile('qml/main.qml');engine.start();

See also engine.loadQML for constructing a QML element from a source string.

Auto-load

You can modify the <body> element to specify what QML file to load when the page is opened. The loaded QML element will fill the whole page.

<!DOCTYPE html><html><head><title>QML Auto-load Example</title><scripttype="text/javascript" src="/lib/qmlweb.js"></script></head><bodystyle="margin: 0" data-qml="qml/main.qml"></body></html>

Web Components

You can register QML files as Custom Elements.

Note: browser support for Custom Elements v1 is limited, and QmlWeb does not include a polyfill. You might want to load a polyfill manually.

Registering the element:

QmlWeb.registerElement('qml-main','qml/main.qml');

Using the element:

<qml-mainheight="300" color="red" firstName="World"></qml-main>

Top-level properties get exported as HTML attributes and are binded to them, real-time updates are possible.

Supported modules and elements

Approximate modules support status for the git version could be viewed on the Projects page.

You can click on the module cards for per-class details.

How to use with Gulp

See gulp-qmlweb package.

How to extend

See Extending.

Related efforts

That will allow users to run the main Qt process on the server and render on HTML clients through WebGL. Qt WebGL streaming requires one application process on server per each client — only the painting is delegated to the client.

The usecase differs significantly from QmlWeb, as QmlWeb runs all code on the clients, attempting to reuse browser APIs as much as possible to provide better integration. No server-side code is needed, server provides static files.

PureQml aims to implement a language close to original QML, but it does not target 100% compatibility with Qt QML, unlike QmlWeb. They also provide a framework based on their language and target support for a great variety of platforms.

Transplitting all the required Qt/QML libraries to JS/WebAssembley and rendering everything to Canvas provides the best possible compatibility with upstream Qt. That comes at a price, though — the runtime is pretty big, and that approach does not allow to reuse many existing browser APIs and components.

Similar as the above «Qt/QML + Emscripten», but more up to date. Upstream issue: QTBUG-63917.

Examples at https://msorvig.github.io/qt-webassembly-examples/.

About

Prototype of QML engine in a web browser

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - igosoft/qmlweb: Prototype of QML engine in a web browser · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

Join the chat at https://gitter.im/qmlweb/qmlwebBuild Statuscodecov

npmBowerGitHub tag

This project aims at bringing the power of QML to the web browser. Here's a sample of how QML looks like:

importQtQuick2.0Rectangle {
width:500; height:200
color:"lightgray"Text {
id: helloText
text:"Hello world!"anchors.verticalCenter:parent.verticalCenteranchors.horizontalCenter:parent.horizontalCenterfont.pointSize:24; font.bold:true
}
}

How to use

Add the library to your web page

Using one of the methods below, install the qmlweb JavaScript library:

  • npmnpm install qmlweb
  • GitHub releasestar -xaf v0.2.0.tar.gz
  • Manually (recommended if you cloned from git) — npm install && npm run build

Next, simply add lib/qmlweb.js to the list of other JavaScript files in your app's HTML file:

<scripttype="text/javascript" src="/lib/qmlweb.js"></script>

See the examples directory for more details and complete usage examples.

Testing from a local folder

Note that due to security restrictions (which are there to protect you!) browsers do not allow loading arbitrary local files, which includes *.qml.

Because of that, to test the goodness of QmlWeb on your own machine, you have to spin up a local http server, e.g. by running npx http-server.

Or try out qmlweb-viewer.

API

You can use DOM elements as the base for QML components:

vardiv=document.getElementById('embed');// this is your DOM elementvarengine=newQmlWeb.QMLEngine(div);engine.loadFile('qml/main.qml');engine.start();

See also engine.loadQML for constructing a QML element from a source string.

Auto-load

You can modify the <body> element to specify what QML file to load when the page is opened. The loaded QML element will fill the whole page.

<!DOCTYPE html><html><head><title>QML Auto-load Example</title><scripttype="text/javascript" src="/lib/qmlweb.js"></script></head><bodystyle="margin: 0" data-qml="qml/main.qml"></body></html>

Web Components

You can register QML files as Custom Elements.

Note: browser support for Custom Elements v1 is limited, and QmlWeb does not include a polyfill. You might want to load a polyfill manually.

Registering the element:

QmlWeb.registerElement('qml-main','qml/main.qml');

Using the element:

<qml-mainheight="300" color="red" firstName="World"></qml-main>

Top-level properties get exported as HTML attributes and are binded to them, real-time updates are possible.

Supported modules and elements

Approximate modules support status for the git version could be viewed on the Projects page.

You can click on the module cards for per-class details.

How to use with Gulp

See gulp-qmlweb package.

How to extend

See Extending.

Related efforts

That will allow users to run the main Qt process on the server and render on HTML clients through WebGL. Qt WebGL streaming requires one application process on server per each client — only the painting is delegated to the client.

The usecase differs significantly from QmlWeb, as QmlWeb runs all code on the clients, attempting to reuse browser APIs as much as possible to provide better integration. No server-side code is needed, server provides static files.

PureQml aims to implement a language close to original QML, but it does not target 100% compatibility with Qt QML, unlike QmlWeb. They also provide a framework based on their language and target support for a great variety of platforms.

Transplitting all the required Qt/QML libraries to JS/WebAssembley and rendering everything to Canvas provides the best possible compatibility with upstream Qt. That comes at a price, though — the runtime is pretty big, and that approach does not allow to reuse many existing browser APIs and components.

Similar as the above «Qt/QML + Emscripten», but more up to date. Upstream issue: QTBUG-63917.

Examples at https://msorvig.github.io/qt-webassembly-examples/.

About

Prototype of QML engine in a web browser

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - igosoft/qmlweb: Prototype of QML engine in a web browser · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

Join the chat at https://gitter.im/qmlweb/qmlwebBuild Statuscodecov

npmBowerGitHub tag

This project aims at bringing the power of QML to the web browser. Here's a sample of how QML looks like:

importQtQuick2.0Rectangle {
width:500; height:200
color:"lightgray"Text {
id: helloText
text:"Hello world!"anchors.verticalCenter:parent.verticalCenteranchors.horizontalCenter:parent.horizontalCenterfont.pointSize:24; font.bold:true
}
}

How to use

Add the library to your web page

Using one of the methods below, install the qmlweb JavaScript library:

  • npmnpm install qmlweb
  • GitHub releasestar -xaf v0.2.0.tar.gz
  • Manually (recommended if you cloned from git) — npm install && npm run build

Next, simply add lib/qmlweb.js to the list of other JavaScript files in your app's HTML file:

<scripttype="text/javascript" src="/lib/qmlweb.js"></script>

See the examples directory for more details and complete usage examples.

Testing from a local folder

Note that due to security restrictions (which are there to protect you!) browsers do not allow loading arbitrary local files, which includes *.qml.

Because of that, to test the goodness of QmlWeb on your own machine, you have to spin up a local http server, e.g. by running npx http-server.

Or try out qmlweb-viewer.

API

You can use DOM elements as the base for QML components:

vardiv=document.getElementById('embed');// this is your DOM elementvarengine=newQmlWeb.QMLEngine(div);engine.loadFile('qml/main.qml');engine.start();

See also engine.loadQML for constructing a QML element from a source string.

Auto-load

You can modify the <body> element to specify what QML file to load when the page is opened. The loaded QML element will fill the whole page.

<!DOCTYPE html><html><head><title>QML Auto-load Example</title><scripttype="text/javascript" src="/lib/qmlweb.js"></script></head><bodystyle="margin: 0" data-qml="qml/main.qml"></body></html>

Web Components

You can register QML files as Custom Elements.

Note: browser support for Custom Elements v1 is limited, and QmlWeb does not include a polyfill. You might want to load a polyfill manually.

Registering the element:

QmlWeb.registerElement('qml-main','qml/main.qml');

Using the element:

<qml-mainheight="300" color="red" firstName="World"></qml-main>

Top-level properties get exported as HTML attributes and are binded to them, real-time updates are possible.

Supported modules and elements

Approximate modules support status for the git version could be viewed on the Projects page.

You can click on the module cards for per-class details.

How to use with Gulp

See gulp-qmlweb package.

How to extend

See Extending.

Related efforts

That will allow users to run the main Qt process on the server and render on HTML clients through WebGL. Qt WebGL streaming requires one application process on server per each client — only the painting is delegated to the client.

The usecase differs significantly from QmlWeb, as QmlWeb runs all code on the clients, attempting to reuse browser APIs as much as possible to provide better integration. No server-side code is needed, server provides static files.

PureQml aims to implement a language close to original QML, but it does not target 100% compatibility with Qt QML, unlike QmlWeb. They also provide a framework based on their language and target support for a great variety of platforms.

Transplitting all the required Qt/QML libraries to JS/WebAssembley and rendering everything to Canvas provides the best possible compatibility with upstream Qt. That comes at a price, though — the runtime is pretty big, and that approach does not allow to reuse many existing browser APIs and components.

Similar as the above «Qt/QML + Emscripten», but more up to date. Upstream issue: QTBUG-63917.

Examples at https://msorvig.github.io/qt-webassembly-examples/.

About

Prototype of QML engine in a web browser

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - igosoft/qmlweb: Prototype of QML engine in a web browser · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

Join the chat at https://gitter.im/qmlweb/qmlwebBuild Statuscodecov

npmBowerGitHub tag

This project aims at bringing the power of QML to the web browser. Here's a sample of how QML looks like:

importQtQuick2.0Rectangle {
width:500; height:200
color:"lightgray"Text {
id: helloText
text:"Hello world!"anchors.verticalCenter:parent.verticalCenteranchors.horizontalCenter:parent.horizontalCenterfont.pointSize:24; font.bold:true
}
}

How to use

Add the library to your web page

Using one of the methods below, install the qmlweb JavaScript library:

  • npmnpm install qmlweb
  • GitHub releasestar -xaf v0.2.0.tar.gz
  • Manually (recommended if you cloned from git) — npm install && npm run build

Next, simply add lib/qmlweb.js to the list of other JavaScript files in your app's HTML file:

<scripttype="text/javascript" src="/lib/qmlweb.js"></script>

See the examples directory for more details and complete usage examples.

Testing from a local folder

Note that due to security restrictions (which are there to protect you!) browsers do not allow loading arbitrary local files, which includes *.qml.

Because of that, to test the goodness of QmlWeb on your own machine, you have to spin up a local http server, e.g. by running npx http-server.

Or try out qmlweb-viewer.

API

You can use DOM elements as the base for QML components:

vardiv=document.getElementById('embed');// this is your DOM elementvarengine=newQmlWeb.QMLEngine(div);engine.loadFile('qml/main.qml');engine.start();

See also engine.loadQML for constructing a QML element from a source string.

Auto-load

You can modify the <body> element to specify what QML file to load when the page is opened. The loaded QML element will fill the whole page.

<!DOCTYPE html><html><head><title>QML Auto-load Example</title><scripttype="text/javascript" src="/lib/qmlweb.js"></script></head><bodystyle="margin: 0" data-qml="qml/main.qml"></body></html>

Web Components

You can register QML files as Custom Elements.

Note: browser support for Custom Elements v1 is limited, and QmlWeb does not include a polyfill. You might want to load a polyfill manually.

Registering the element:

QmlWeb.registerElement('qml-main','qml/main.qml');

Using the element:

<qml-mainheight="300" color="red" firstName="World"></qml-main>

Top-level properties get exported as HTML attributes and are binded to them, real-time updates are possible.

Supported modules and elements

Approximate modules support status for the git version could be viewed on the Projects page.

You can click on the module cards for per-class details.

How to use with Gulp

See gulp-qmlweb package.

How to extend

See Extending.

Related efforts

That will allow users to run the main Qt process on the server and render on HTML clients through WebGL. Qt WebGL streaming requires one application process on server per each client — only the painting is delegated to the client.

The usecase differs significantly from QmlWeb, as QmlWeb runs all code on the clients, attempting to reuse browser APIs as much as possible to provide better integration. No server-side code is needed, server provides static files.

PureQml aims to implement a language close to original QML, but it does not target 100% compatibility with Qt QML, unlike QmlWeb. They also provide a framework based on their language and target support for a great variety of platforms.

Transplitting all the required Qt/QML libraries to JS/WebAssembley and rendering everything to Canvas provides the best possible compatibility with upstream Qt. That comes at a price, though — the runtime is pretty big, and that approach does not allow to reuse many existing browser APIs and components.

Similar as the above «Qt/QML + Emscripten», but more up to date. Upstream issue: QTBUG-63917.

Examples at https://msorvig.github.io/qt-webassembly-examples/.

About

Prototype of QML engine in a web browser

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - igosoft/qmlweb: Prototype of QML engine in a web browser · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

Join the chat at https://gitter.im/qmlweb/qmlwebBuild Statuscodecov

npmBowerGitHub tag

This project aims at bringing the power of QML to the web browser. Here's a sample of how QML looks like:

importQtQuick2.0Rectangle {
width:500; height:200
color:"lightgray"Text {
id: helloText
text:"Hello world!"anchors.verticalCenter:parent.verticalCenteranchors.horizontalCenter:parent.horizontalCenterfont.pointSize:24; font.bold:true
}
}

How to use

Add the library to your web page

Using one of the methods below, install the qmlweb JavaScript library:

  • npmnpm install qmlweb
  • GitHub releasestar -xaf v0.2.0.tar.gz
  • Manually (recommended if you cloned from git) — npm install && npm run build

Next, simply add lib/qmlweb.js to the list of other JavaScript files in your app's HTML file:

<scripttype="text/javascript" src="/lib/qmlweb.js"></script>

See the examples directory for more details and complete usage examples.

Testing from a local folder

Note that due to security restrictions (which are there to protect you!) browsers do not allow loading arbitrary local files, which includes *.qml.

Because of that, to test the goodness of QmlWeb on your own machine, you have to spin up a local http server, e.g. by running npx http-server.

Or try out qmlweb-viewer.

API

You can use DOM elements as the base for QML components:

vardiv=document.getElementById('embed');// this is your DOM elementvarengine=newQmlWeb.QMLEngine(div);engine.loadFile('qml/main.qml');engine.start();

See also engine.loadQML for constructing a QML element from a source string.

Auto-load

You can modify the <body> element to specify what QML file to load when the page is opened. The loaded QML element will fill the whole page.

<!DOCTYPE html><html><head><title>QML Auto-load Example</title><scripttype="text/javascript" src="/lib/qmlweb.js"></script></head><bodystyle="margin: 0" data-qml="qml/main.qml"></body></html>

Web Components

You can register QML files as Custom Elements.

Note: browser support for Custom Elements v1 is limited, and QmlWeb does not include a polyfill. You might want to load a polyfill manually.

Registering the element:

QmlWeb.registerElement('qml-main','qml/main.qml');

Using the element:

<qml-mainheight="300" color="red" firstName="World"></qml-main>

Top-level properties get exported as HTML attributes and are binded to them, real-time updates are possible.

Supported modules and elements

Approximate modules support status for the git version could be viewed on the Projects page.

You can click on the module cards for per-class details.

How to use with Gulp

See gulp-qmlweb package.

How to extend

See Extending.

Related efforts

That will allow users to run the main Qt process on the server and render on HTML clients through WebGL. Qt WebGL streaming requires one application process on server per each client — only the painting is delegated to the client.

The usecase differs significantly from QmlWeb, as QmlWeb runs all code on the clients, attempting to reuse browser APIs as much as possible to provide better integration. No server-side code is needed, server provides static files.

PureQml aims to implement a language close to original QML, but it does not target 100% compatibility with Qt QML, unlike QmlWeb. They also provide a framework based on their language and target support for a great variety of platforms.

Transplitting all the required Qt/QML libraries to JS/WebAssembley and rendering everything to Canvas provides the best possible compatibility with upstream Qt. That comes at a price, though — the runtime is pretty big, and that approach does not allow to reuse many existing browser APIs and components.

Similar as the above «Qt/QML + Emscripten», but more up to date. Upstream issue: QTBUG-63917.

Examples at https://msorvig.github.io/qt-webassembly-examples/.

About

Prototype of QML engine in a web browser

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - igosoft/qmlweb: Prototype of QML engine in a web browser · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

Join the chat at https://gitter.im/qmlweb/qmlwebBuild Statuscodecov

npmBowerGitHub tag

This project aims at bringing the power of QML to the web browser. Here's a sample of how QML looks like:

importQtQuick2.0Rectangle {
width:500; height:200
color:"lightgray"Text {
id: helloText
text:"Hello world!"anchors.verticalCenter:parent.verticalCenteranchors.horizontalCenter:parent.horizontalCenterfont.pointSize:24; font.bold:true
}
}

How to use

Add the library to your web page

Using one of the methods below, install the qmlweb JavaScript library:

  • npmnpm install qmlweb
  • GitHub releasestar -xaf v0.2.0.tar.gz
  • Manually (recommended if you cloned from git) — npm install && npm run build

Next, simply add lib/qmlweb.js to the list of other JavaScript files in your app's HTML file:

<scripttype="text/javascript" src="/lib/qmlweb.js"></script>

See the examples directory for more details and complete usage examples.

Testing from a local folder

Note that due to security restrictions (which are there to protect you!) browsers do not allow loading arbitrary local files, which includes *.qml.

Because of that, to test the goodness of QmlWeb on your own machine, you have to spin up a local http server, e.g. by running npx http-server.

Or try out qmlweb-viewer.

API

You can use DOM elements as the base for QML components:

vardiv=document.getElementById('embed');// this is your DOM elementvarengine=newQmlWeb.QMLEngine(div);engine.loadFile('qml/main.qml');engine.start();

See also engine.loadQML for constructing a QML element from a source string.

Auto-load

You can modify the <body> element to specify what QML file to load when the page is opened. The loaded QML element will fill the whole page.

<!DOCTYPE html><html><head><title>QML Auto-load Example</title><scripttype="text/javascript" src="/lib/qmlweb.js"></script></head><bodystyle="margin: 0" data-qml="qml/main.qml"></body></html>

Web Components

You can register QML files as Custom Elements.

Note: browser support for Custom Elements v1 is limited, and QmlWeb does not include a polyfill. You might want to load a polyfill manually.

Registering the element:

QmlWeb.registerElement('qml-main','qml/main.qml');

Using the element:

<qml-mainheight="300" color="red" firstName="World"></qml-main>

Top-level properties get exported as HTML attributes and are binded to them, real-time updates are possible.

Supported modules and elements

Approximate modules support status for the git version could be viewed on the Projects page.

You can click on the module cards for per-class details.

How to use with Gulp

See gulp-qmlweb package.

How to extend

See Extending.

Related efforts

That will allow users to run the main Qt process on the server and render on HTML clients through WebGL. Qt WebGL streaming requires one application process on server per each client — only the painting is delegated to the client.

The usecase differs significantly from QmlWeb, as QmlWeb runs all code on the clients, attempting to reuse browser APIs as much as possible to provide better integration. No server-side code is needed, server provides static files.

PureQml aims to implement a language close to original QML, but it does not target 100% compatibility with Qt QML, unlike QmlWeb. They also provide a framework based on their language and target support for a great variety of platforms.

Transplitting all the required Qt/QML libraries to JS/WebAssembley and rendering everything to Canvas provides the best possible compatibility with upstream Qt. That comes at a price, though — the runtime is pretty big, and that approach does not allow to reuse many existing browser APIs and components.

Similar as the above «Qt/QML + Emscripten», but more up to date. Upstream issue: QTBUG-63917.

Examples at https://msorvig.github.io/qt-webassembly-examples/.

About

Prototype of QML engine in a web browser

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - igosoft/qmlweb: Prototype of QML engine in a web browser · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

Join the chat at https://gitter.im/qmlweb/qmlwebBuild Statuscodecov

npmBowerGitHub tag

This project aims at bringing the power of QML to the web browser. Here's a sample of how QML looks like:

importQtQuick2.0Rectangle {
width:500; height:200
color:"lightgray"Text {
id: helloText
text:"Hello world!"anchors.verticalCenter:parent.verticalCenteranchors.horizontalCenter:parent.horizontalCenterfont.pointSize:24; font.bold:true
}
}

How to use

Add the library to your web page

Using one of the methods below, install the qmlweb JavaScript library:

  • npmnpm install qmlweb
  • GitHub releasestar -xaf v0.2.0.tar.gz
  • Manually (recommended if you cloned from git) — npm install && npm run build

Next, simply add lib/qmlweb.js to the list of other JavaScript files in your app's HTML file:

<scripttype="text/javascript" src="/lib/qmlweb.js"></script>

See the examples directory for more details and complete usage examples.

Testing from a local folder

Note that due to security restrictions (which are there to protect you!) browsers do not allow loading arbitrary local files, which includes *.qml.

Because of that, to test the goodness of QmlWeb on your own machine, you have to spin up a local http server, e.g. by running npx http-server.

Or try out qmlweb-viewer.

API

You can use DOM elements as the base for QML components:

vardiv=document.getElementById('embed');// this is your DOM elementvarengine=newQmlWeb.QMLEngine(div);engine.loadFile('qml/main.qml');engine.start();

See also engine.loadQML for constructing a QML element from a source string.

Auto-load

You can modify the <body> element to specify what QML file to load when the page is opened. The loaded QML element will fill the whole page.

<!DOCTYPE html><html><head><title>QML Auto-load Example</title><scripttype="text/javascript" src="/lib/qmlweb.js"></script></head><bodystyle="margin: 0" data-qml="qml/main.qml"></body></html>

Web Components

You can register QML files as Custom Elements.

Note: browser support for Custom Elements v1 is limited, and QmlWeb does not include a polyfill. You might want to load a polyfill manually.

Registering the element:

QmlWeb.registerElement('qml-main','qml/main.qml');

Using the element:

<qml-mainheight="300" color="red" firstName="World"></qml-main>

Top-level properties get exported as HTML attributes and are binded to them, real-time updates are possible.

Supported modules and elements

Approximate modules support status for the git version could be viewed on the Projects page.

You can click on the module cards for per-class details.

How to use with Gulp

See gulp-qmlweb package.

How to extend

See Extending.

Related efforts

That will allow users to run the main Qt process on the server and render on HTML clients through WebGL. Qt WebGL streaming requires one application process on server per each client — only the painting is delegated to the client.

The usecase differs significantly from QmlWeb, as QmlWeb runs all code on the clients, attempting to reuse browser APIs as much as possible to provide better integration. No server-side code is needed, server provides static files.

PureQml aims to implement a language close to original QML, but it does not target 100% compatibility with Qt QML, unlike QmlWeb. They also provide a framework based on their language and target support for a great variety of platforms.

Transplitting all the required Qt/QML libraries to JS/WebAssembley and rendering everything to Canvas provides the best possible compatibility with upstream Qt. That comes at a price, though — the runtime is pretty big, and that approach does not allow to reuse many existing browser APIs and components.

Similar as the above «Qt/QML + Emscripten», but more up to date. Upstream issue: QTBUG-63917.

Examples at https://msorvig.github.io/qt-webassembly-examples/.

About

Prototype of QML engine in a web browser

Resources

Contributing

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages