### Introduction The `QtWebChannel` module offers Qt applications a seamless way to publish `QObjects` for interaction from HTML/JavaScript clients. These clients can either be inside local Qt `WebView`s or any other, potentially remote, client which supports JavaScript and WebSockets. It uses introspection on the `QObject`s and sends this serialized data to the clients. There, with the help of a small JavaScript library, an object is created which simulates the API of the `QObject`. Any invokable methods, including slots, can be called as well as properties read and written. Additionally you can connect to signals and register JavaScript callbacks as handlers. ### Dependencies This module depends on `QtBase` and `QtWebSockets`. Optionally, an additional module for QtQuick is build which makes it easy to use the `QWebChannel` from QML. Furthermore, you can decide to use the native IPC mechanism of `QtWebKit` for efficient message passing to QtQuick `WebView`'s. ### Building qmake-qt5 make make install ### Usage from C++ To use the Qt/C++ library, add the following to your `QMake` project: QT += webchannel Then, in your C++ code, construct a websocket transport and webchannel, then publish your `QObject`s: QWebSocketTransport transport; QWebChannel channel; channel.connectTo(&transport); channel.registerObject(QStringLiteral("foo"), myFooObj); .... On the HTML/JavaScript client side, you need to embed `src/webchannel/qwebchannel.js` and setup the connection to the WebSocket transport. The base URL for that can be found from C++ via `transport.baseUrl()` after the transport was initialized, and must be passed to HTML clients: An example which shows all this can be found in `examples/standalone`. ### Usage from QtQuick For QML applications, use the following import: import QtWebChannel 1.0 Then setup the WebChannel and register objects to it: WebChannel { registeredObjects: [foo, bar, ...] connections: WebViewTransport { webViewExperimental: yourWebView.experimental onMessageReceived: { textEdit.text += "Received message: " + message + "\n"; } } } The above uses a `WebViewTransport` for efficient message passing between the server QML application and HTML clients in a `WebView`, which must be setup as follows: WebView { id: yourWebView experimental.preferences.navigatorQtObjectEnabled: true } The HTML client finally uses a similar setup as above, but can make use of the embedded resource for `qwebchannel.js` and the `navigator.qt` object: To see this in action, take a look at `examples/qml` and run the `example.qml` in `qmlscene`.