Skip to content

Repository files navigation

JavaScript powered QML Engine

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

npmBowerGitHub tag

CSS and HTML are boring and lame. And they suck at designing cool, interactive interfaces. Qt came up with a much better answer for its renowned framework: QML, a declarative language perfect for designing UIs (and much more). 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
}
}

This project aims at bringing the power of QML to the web browser.

How to use

Add the library to your web page

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

  • npm:

    npm install qmlweb
    
  • Bower:

    bower install qmlweb
    
  • GitHub releases:

    tar -xzvf v0.0.4.tar.gz
    
  • Manually using gulp (recommended if you cloned from git):

    npm install
    npm run build
    

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

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

Auto-load

You may then modify the <body> element to specify what QML file to load when the page is opened.

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

How to use with Gulp

See gulp-qmlweb package.

How to extend

When implementing new features, you may need to get away from QML and create your own QML components from scratch, using directly the engine's API.

registerQmlType({module: 'MyModule',name: 'MyTypeName',baseClass: 'QtQuick.Item',versions: /^1(\.[0-3])?$/,// that regexp must match the version number for the import to workconstructor: function(meta){callSuper(this,meta);varself=this;// Managing propertiescreateProperty("var",this,"data");// creates a property 'data' of undefined type// creates a property 'name' of type string, with a default valuecreateProperty("string",this,"name",{initialValue: 'default name'});// Signalsthis.somethingHappened=Signal();// creates a signal somethingHappenedthis.somethingHappened.connect(this,function(){console.log('You may also connect to signals in JavaScript');});// Using the DOMfunctionupdateText(){vartext='';for(vari=0;i<self.data.length;++i)text+='['+data[i]+'] ';self.dom.textContent=text;// Updating the domself.somethingHappened();// triggers the 'somethingHappened' signal.}// Run updateText once, ensure it'll be executed whenever the 'data' property changes.updateText();this.onDataChanged.connect(this,updateText);}});

And here's how you would use that component in a regular QML file:

importMyModule1.3MyTypeName {
name:'el nombre'
data: [ 1, 2, 3 ]
onSomethingHappened:console.log(data)
}

History

  1. git://anongit.kde.org/qmlweb, see Webapps written in qml not far from reality anymore,
  2. @JoshuaKolden/qmlweb,
  3. @Plaristote/qmlweb,
  4. @labsin/qmlweb,
  5. @arnopaehler/qmlweb.

About

A QML engine in a web browser. Current state: merging the numerous out-of-date forks.

Resources

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 - stephenmdangelo/qmlweb: A QML engine in a web browser. Current state: merging the numerous out-of-date forks. · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

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

npmBowerGitHub tag

CSS and HTML are boring and lame. And they suck at designing cool, interactive interfaces. Qt came up with a much better answer for its renowned framework: QML, a declarative language perfect for designing UIs (and much more). 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
}
}

This project aims at bringing the power of QML to the web browser.

How to use

Add the library to your web page

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

  • npm:

    npm install qmlweb
    
  • Bower:

    bower install qmlweb
    
  • GitHub releases:

    tar -xzvf v0.0.4.tar.gz
    
  • Manually using gulp (recommended if you cloned from git):

    npm install
    npm run build
    

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

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

Auto-load

You may then modify the <body> element to specify what QML file to load when the page is opened.

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

How to use with Gulp

See gulp-qmlweb package.

How to extend

When implementing new features, you may need to get away from QML and create your own QML components from scratch, using directly the engine's API.

registerQmlType({module: 'MyModule',name: 'MyTypeName',baseClass: 'QtQuick.Item',versions: /^1(\.[0-3])?$/,// that regexp must match the version number for the import to workconstructor: function(meta){callSuper(this,meta);varself=this;// Managing propertiescreateProperty("var",this,"data");// creates a property 'data' of undefined type// creates a property 'name' of type string, with a default valuecreateProperty("string",this,"name",{initialValue: 'default name'});// Signalsthis.somethingHappened=Signal();// creates a signal somethingHappenedthis.somethingHappened.connect(this,function(){console.log('You may also connect to signals in JavaScript');});// Using the DOMfunctionupdateText(){vartext='';for(vari=0;i<self.data.length;++i)text+='['+data[i]+'] ';self.dom.textContent=text;// Updating the domself.somethingHappened();// triggers the 'somethingHappened' signal.}// Run updateText once, ensure it'll be executed whenever the 'data' property changes.updateText();this.onDataChanged.connect(this,updateText);}});

And here's how you would use that component in a regular QML file:

importMyModule1.3MyTypeName {
name:'el nombre'
data: [ 1, 2, 3 ]
onSomethingHappened:console.log(data)
}

History

  1. git://anongit.kde.org/qmlweb, see Webapps written in qml not far from reality anymore,
  2. @JoshuaKolden/qmlweb,
  3. @Plaristote/qmlweb,
  4. @labsin/qmlweb,
  5. @arnopaehler/qmlweb.

About

A QML engine in a web browser. Current state: merging the numerous out-of-date forks.

Resources

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 - stephenmdangelo/qmlweb: A QML engine in a web browser. Current state: merging the numerous out-of-date forks. · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

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

npmBowerGitHub tag

CSS and HTML are boring and lame. And they suck at designing cool, interactive interfaces. Qt came up with a much better answer for its renowned framework: QML, a declarative language perfect for designing UIs (and much more). 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
}
}

This project aims at bringing the power of QML to the web browser.

How to use

Add the library to your web page

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

  • npm:

    npm install qmlweb
    
  • Bower:

    bower install qmlweb
    
  • GitHub releases:

    tar -xzvf v0.0.4.tar.gz
    
  • Manually using gulp (recommended if you cloned from git):

    npm install
    npm run build
    

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

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

Auto-load

You may then modify the <body> element to specify what QML file to load when the page is opened.

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

How to use with Gulp

See gulp-qmlweb package.

How to extend

When implementing new features, you may need to get away from QML and create your own QML components from scratch, using directly the engine's API.

registerQmlType({module: 'MyModule',name: 'MyTypeName',baseClass: 'QtQuick.Item',versions: /^1(\.[0-3])?$/,// that regexp must match the version number for the import to workconstructor: function(meta){callSuper(this,meta);varself=this;// Managing propertiescreateProperty("var",this,"data");// creates a property 'data' of undefined type// creates a property 'name' of type string, with a default valuecreateProperty("string",this,"name",{initialValue: 'default name'});// Signalsthis.somethingHappened=Signal();// creates a signal somethingHappenedthis.somethingHappened.connect(this,function(){console.log('You may also connect to signals in JavaScript');});// Using the DOMfunctionupdateText(){vartext='';for(vari=0;i<self.data.length;++i)text+='['+data[i]+'] ';self.dom.textContent=text;// Updating the domself.somethingHappened();// triggers the 'somethingHappened' signal.}// Run updateText once, ensure it'll be executed whenever the 'data' property changes.updateText();this.onDataChanged.connect(this,updateText);}});

And here's how you would use that component in a regular QML file:

importMyModule1.3MyTypeName {
name:'el nombre'
data: [ 1, 2, 3 ]
onSomethingHappened:console.log(data)
}

History

  1. git://anongit.kde.org/qmlweb, see Webapps written in qml not far from reality anymore,
  2. @JoshuaKolden/qmlweb,
  3. @Plaristote/qmlweb,
  4. @labsin/qmlweb,
  5. @arnopaehler/qmlweb.

About

A QML engine in a web browser. Current state: merging the numerous out-of-date forks.

Resources

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 - stephenmdangelo/qmlweb: A QML engine in a web browser. Current state: merging the numerous out-of-date forks. · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

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

npmBowerGitHub tag

CSS and HTML are boring and lame. And they suck at designing cool, interactive interfaces. Qt came up with a much better answer for its renowned framework: QML, a declarative language perfect for designing UIs (and much more). 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
}
}

This project aims at bringing the power of QML to the web browser.

How to use

Add the library to your web page

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

  • npm:

    npm install qmlweb
    
  • Bower:

    bower install qmlweb
    
  • GitHub releases:

    tar -xzvf v0.0.4.tar.gz
    
  • Manually using gulp (recommended if you cloned from git):

    npm install
    npm run build
    

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

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

Auto-load

You may then modify the <body> element to specify what QML file to load when the page is opened.

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

How to use with Gulp

See gulp-qmlweb package.

How to extend

When implementing new features, you may need to get away from QML and create your own QML components from scratch, using directly the engine's API.

registerQmlType({module: 'MyModule',name: 'MyTypeName',baseClass: 'QtQuick.Item',versions: /^1(\.[0-3])?$/,// that regexp must match the version number for the import to workconstructor: function(meta){callSuper(this,meta);varself=this;// Managing propertiescreateProperty("var",this,"data");// creates a property 'data' of undefined type// creates a property 'name' of type string, with a default valuecreateProperty("string",this,"name",{initialValue: 'default name'});// Signalsthis.somethingHappened=Signal();// creates a signal somethingHappenedthis.somethingHappened.connect(this,function(){console.log('You may also connect to signals in JavaScript');});// Using the DOMfunctionupdateText(){vartext='';for(vari=0;i<self.data.length;++i)text+='['+data[i]+'] ';self.dom.textContent=text;// Updating the domself.somethingHappened();// triggers the 'somethingHappened' signal.}// Run updateText once, ensure it'll be executed whenever the 'data' property changes.updateText();this.onDataChanged.connect(this,updateText);}});

And here's how you would use that component in a regular QML file:

importMyModule1.3MyTypeName {
name:'el nombre'
data: [ 1, 2, 3 ]
onSomethingHappened:console.log(data)
}

History

  1. git://anongit.kde.org/qmlweb, see Webapps written in qml not far from reality anymore,
  2. @JoshuaKolden/qmlweb,
  3. @Plaristote/qmlweb,
  4. @labsin/qmlweb,
  5. @arnopaehler/qmlweb.

About

A QML engine in a web browser. Current state: merging the numerous out-of-date forks.

Resources

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 - stephenmdangelo/qmlweb: A QML engine in a web browser. Current state: merging the numerous out-of-date forks. · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

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

npmBowerGitHub tag

CSS and HTML are boring and lame. And they suck at designing cool, interactive interfaces. Qt came up with a much better answer for its renowned framework: QML, a declarative language perfect for designing UIs (and much more). 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
}
}

This project aims at bringing the power of QML to the web browser.

How to use

Add the library to your web page

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

  • npm:

    npm install qmlweb
    
  • Bower:

    bower install qmlweb
    
  • GitHub releases:

    tar -xzvf v0.0.4.tar.gz
    
  • Manually using gulp (recommended if you cloned from git):

    npm install
    npm run build
    

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

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

Auto-load

You may then modify the <body> element to specify what QML file to load when the page is opened.

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

How to use with Gulp

See gulp-qmlweb package.

How to extend

When implementing new features, you may need to get away from QML and create your own QML components from scratch, using directly the engine's API.

registerQmlType({module: 'MyModule',name: 'MyTypeName',baseClass: 'QtQuick.Item',versions: /^1(\.[0-3])?$/,// that regexp must match the version number for the import to workconstructor: function(meta){callSuper(this,meta);varself=this;// Managing propertiescreateProperty("var",this,"data");// creates a property 'data' of undefined type// creates a property 'name' of type string, with a default valuecreateProperty("string",this,"name",{initialValue: 'default name'});// Signalsthis.somethingHappened=Signal();// creates a signal somethingHappenedthis.somethingHappened.connect(this,function(){console.log('You may also connect to signals in JavaScript');});// Using the DOMfunctionupdateText(){vartext='';for(vari=0;i<self.data.length;++i)text+='['+data[i]+'] ';self.dom.textContent=text;// Updating the domself.somethingHappened();// triggers the 'somethingHappened' signal.}// Run updateText once, ensure it'll be executed whenever the 'data' property changes.updateText();this.onDataChanged.connect(this,updateText);}});

And here's how you would use that component in a regular QML file:

importMyModule1.3MyTypeName {
name:'el nombre'
data: [ 1, 2, 3 ]
onSomethingHappened:console.log(data)
}

History

  1. git://anongit.kde.org/qmlweb, see Webapps written in qml not far from reality anymore,
  2. @JoshuaKolden/qmlweb,
  3. @Plaristote/qmlweb,
  4. @labsin/qmlweb,
  5. @arnopaehler/qmlweb.

About

A QML engine in a web browser. Current state: merging the numerous out-of-date forks.

Resources

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 - stephenmdangelo/qmlweb: A QML engine in a web browser. Current state: merging the numerous out-of-date forks. · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

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

npmBowerGitHub tag

CSS and HTML are boring and lame. And they suck at designing cool, interactive interfaces. Qt came up with a much better answer for its renowned framework: QML, a declarative language perfect for designing UIs (and much more). 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
}
}

This project aims at bringing the power of QML to the web browser.

How to use

Add the library to your web page

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

  • npm:

    npm install qmlweb
    
  • Bower:

    bower install qmlweb
    
  • GitHub releases:

    tar -xzvf v0.0.4.tar.gz
    
  • Manually using gulp (recommended if you cloned from git):

    npm install
    npm run build
    

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

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

Auto-load

You may then modify the <body> element to specify what QML file to load when the page is opened.

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

How to use with Gulp

See gulp-qmlweb package.

How to extend

When implementing new features, you may need to get away from QML and create your own QML components from scratch, using directly the engine's API.

registerQmlType({module: 'MyModule',name: 'MyTypeName',baseClass: 'QtQuick.Item',versions: /^1(\.[0-3])?$/,// that regexp must match the version number for the import to workconstructor: function(meta){callSuper(this,meta);varself=this;// Managing propertiescreateProperty("var",this,"data");// creates a property 'data' of undefined type// creates a property 'name' of type string, with a default valuecreateProperty("string",this,"name",{initialValue: 'default name'});// Signalsthis.somethingHappened=Signal();// creates a signal somethingHappenedthis.somethingHappened.connect(this,function(){console.log('You may also connect to signals in JavaScript');});// Using the DOMfunctionupdateText(){vartext='';for(vari=0;i<self.data.length;++i)text+='['+data[i]+'] ';self.dom.textContent=text;// Updating the domself.somethingHappened();// triggers the 'somethingHappened' signal.}// Run updateText once, ensure it'll be executed whenever the 'data' property changes.updateText();this.onDataChanged.connect(this,updateText);}});

And here's how you would use that component in a regular QML file:

importMyModule1.3MyTypeName {
name:'el nombre'
data: [ 1, 2, 3 ]
onSomethingHappened:console.log(data)
}

History

  1. git://anongit.kde.org/qmlweb, see Webapps written in qml not far from reality anymore,
  2. @JoshuaKolden/qmlweb,
  3. @Plaristote/qmlweb,
  4. @labsin/qmlweb,
  5. @arnopaehler/qmlweb.

About

A QML engine in a web browser. Current state: merging the numerous out-of-date forks.

Resources

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 - stephenmdangelo/qmlweb: A QML engine in a web browser. Current state: merging the numerous out-of-date forks. · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

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

npmBowerGitHub tag

CSS and HTML are boring and lame. And they suck at designing cool, interactive interfaces. Qt came up with a much better answer for its renowned framework: QML, a declarative language perfect for designing UIs (and much more). 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
}
}

This project aims at bringing the power of QML to the web browser.

How to use

Add the library to your web page

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

  • npm:

    npm install qmlweb
    
  • Bower:

    bower install qmlweb
    
  • GitHub releases:

    tar -xzvf v0.0.4.tar.gz
    
  • Manually using gulp (recommended if you cloned from git):

    npm install
    npm run build
    

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

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

Auto-load

You may then modify the <body> element to specify what QML file to load when the page is opened.

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

How to use with Gulp

See gulp-qmlweb package.

How to extend

When implementing new features, you may need to get away from QML and create your own QML components from scratch, using directly the engine's API.

registerQmlType({module: 'MyModule',name: 'MyTypeName',baseClass: 'QtQuick.Item',versions: /^1(\.[0-3])?$/,// that regexp must match the version number for the import to workconstructor: function(meta){callSuper(this,meta);varself=this;// Managing propertiescreateProperty("var",this,"data");// creates a property 'data' of undefined type// creates a property 'name' of type string, with a default valuecreateProperty("string",this,"name",{initialValue: 'default name'});// Signalsthis.somethingHappened=Signal();// creates a signal somethingHappenedthis.somethingHappened.connect(this,function(){console.log('You may also connect to signals in JavaScript');});// Using the DOMfunctionupdateText(){vartext='';for(vari=0;i<self.data.length;++i)text+='['+data[i]+'] ';self.dom.textContent=text;// Updating the domself.somethingHappened();// triggers the 'somethingHappened' signal.}// Run updateText once, ensure it'll be executed whenever the 'data' property changes.updateText();this.onDataChanged.connect(this,updateText);}});

And here's how you would use that component in a regular QML file:

importMyModule1.3MyTypeName {
name:'el nombre'
data: [ 1, 2, 3 ]
onSomethingHappened:console.log(data)
}

History

  1. git://anongit.kde.org/qmlweb, see Webapps written in qml not far from reality anymore,
  2. @JoshuaKolden/qmlweb,
  3. @Plaristote/qmlweb,
  4. @labsin/qmlweb,
  5. @arnopaehler/qmlweb.

About

A QML engine in a web browser. Current state: merging the numerous out-of-date forks.

Resources

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 - stephenmdangelo/qmlweb: A QML engine in a web browser. Current state: merging the numerous out-of-date forks. · GitHub
Skip to content

Repository files navigation

JavaScript powered QML Engine

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

npmBowerGitHub tag

CSS and HTML are boring and lame. And they suck at designing cool, interactive interfaces. Qt came up with a much better answer for its renowned framework: QML, a declarative language perfect for designing UIs (and much more). 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
}
}

This project aims at bringing the power of QML to the web browser.

How to use

Add the library to your web page

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

  • npm:

    npm install qmlweb
    
  • Bower:

    bower install qmlweb
    
  • GitHub releases:

    tar -xzvf v0.0.4.tar.gz
    
  • Manually using gulp (recommended if you cloned from git):

    npm install
    npm run build
    

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

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

Auto-load

You may then modify the <body> element to specify what QML file to load when the page is opened.

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

How to use with Gulp

See gulp-qmlweb package.

How to extend

When implementing new features, you may need to get away from QML and create your own QML components from scratch, using directly the engine's API.

registerQmlType({module: 'MyModule',name: 'MyTypeName',baseClass: 'QtQuick.Item',versions: /^1(\.[0-3])?$/,// that regexp must match the version number for the import to workconstructor: function(meta){callSuper(this,meta);varself=this;// Managing propertiescreateProperty("var",this,"data");// creates a property 'data' of undefined type// creates a property 'name' of type string, with a default valuecreateProperty("string",this,"name",{initialValue: 'default name'});// Signalsthis.somethingHappened=Signal();// creates a signal somethingHappenedthis.somethingHappened.connect(this,function(){console.log('You may also connect to signals in JavaScript');});// Using the DOMfunctionupdateText(){vartext='';for(vari=0;i<self.data.length;++i)text+='['+data[i]+'] ';self.dom.textContent=text;// Updating the domself.somethingHappened();// triggers the 'somethingHappened' signal.}// Run updateText once, ensure it'll be executed whenever the 'data' property changes.updateText();this.onDataChanged.connect(this,updateText);}});

And here's how you would use that component in a regular QML file:

importMyModule1.3MyTypeName {
name:'el nombre'
data: [ 1, 2, 3 ]
onSomethingHappened:console.log(data)
}

History

  1. git://anongit.kde.org/qmlweb, see Webapps written in qml not far from reality anymore,
  2. @JoshuaKolden/qmlweb,
  3. @Plaristote/qmlweb,
  4. @labsin/qmlweb,
  5. @arnopaehler/qmlweb.

About

A QML engine in a web browser. Current state: merging the numerous out-of-date forks.

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages