diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/qml/README | 3 | ||||
-rw-r--r-- | examples/qml/example.qml | 117 | ||||
-rw-r--r-- | examples/qml/index.html | 59 | ||||
-rw-r--r-- | examples/standalone/main.cpp | 60 | ||||
-rw-r--r-- | examples/standalone/standalone.pro | 2 |
5 files changed, 47 insertions, 194 deletions
diff --git a/examples/qml/README b/examples/qml/README deleted file mode 100644 index cf0e041..0000000 --- a/examples/qml/README +++ /dev/null @@ -1,3 +0,0 @@ -To run this example, install QtWebKit, QtWebChannel and QtQuickControls modules, then run: - -qmlscene ./example.qml diff --git a/examples/qml/example.qml b/examples/qml/example.qml deleted file mode 100644 index 2d51f27..0000000 --- a/examples/qml/example.qml +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtWebChannel module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.1 - -import QtWebChannel 1.0 - -import QtQuick.Controls 1.0 -import QtQuick.Layouts 1.0 - -import QtWebKit 3.0 -import QtWebKit.experimental 1.0 - -ApplicationWindow { - id: window - title: "QtWebChannel Example: QML Server to QtWebKit WebView Client" - width: 600 - height: 400 - - WebChannel { - id: webChannel - - connections: WebViewTransport { - webViewExperimental: webView.experimental - onMessageReceived: { - textEdit.text += "Received message: " + message + "\n"; - } - } - } - - RowLayout { - id: myRow - anchors.fill: parent - ColumnLayout { - id: myCol - Label { - id: caption - text: "QML Server" - font.bold: true - } - TextArea { - Layout.fillHeight: true - Layout.fillWidth: true - id: textEdit - readOnly: true - } - RowLayout { - Label { - id: label - text: "Input: " - } - TextField { - id: input - Layout.fillWidth: true - } - Button { - id: send - text: "Send" - onClicked: { - if (input.text) { - webChannel.sendMessage("message", input.text); - textEdit.text += "Sent message: " + input.text + "\n"; - input.text = "" - } - } - } - } - } - WebView { - Layout.fillWidth: true - Layout.fillHeight: true - Layout.minimumWidth: window.width / 2 - id: webView - url: "index.html" - experimental.preferences.developerExtrasEnabled: true - experimental.preferences.navigatorQtObjectEnabled: true - } - } -} diff --git a/examples/qml/index.html b/examples/qml/index.html deleted file mode 100644 index 8b65dd2..0000000 --- a/examples/qml/index.html +++ /dev/null @@ -1,59 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <script type="text/javascript" src="qrc:///qwebchannel/qwebchannel.js"></script> - <script type="text/javascript"> - //BEGIN SETUP - new QWebChannel(navigator.qt, function(channel) { - document.getElementById("send").onclick = function() { - var input = document.getElementById("input"); - var text = input.value; - if (!text) { - return; - } - var output = document.getElementById("output"); - output.innerHTML = output.innerHTML + "Sent message: " + text + "\n"; - input.value = ""; - channel.send(text); - } - - channel.subscribe("message", function(text) { - var output = document.getElementById("output"); - output.innerHTML = output.innerHTML + "Received message: " + text + "\n"; - }); - }, true /* raw web channel */); - //END SETUP - </script> - <style type="text/css"> - * { - padding: 0; - margin: 0; - font-size: 40px; - } - html, body { - height: 100%; - width: 100%; - } - #div { - height: 100%; - padding: 0 10%; - } - #input { - width: 50%; - margin: 0 10px; - } - #output { - width: 100%; - height: 80%; - } - </style> - </head> - <body> - <div id="div"> - <h1>HTML Client</h1> - <textarea id="output" readonly></textarea><br /> - Input: <input id="input" /><input type="submit" id="send" value="Send" onclick="javascript:click();" /> - </div> - </body> -</html> diff --git a/examples/standalone/main.cpp b/examples/standalone/main.cpp index 47f7ea2..05deb24 100644 --- a/examples/standalone/main.cpp +++ b/examples/standalone/main.cpp @@ -40,7 +40,6 @@ ****************************************************************************/ #include "qwebchannel.h" -#include "qwebsockettransport.h" #include <QApplication> #include <QDialog> @@ -49,6 +48,10 @@ #include <QUrl> #include <QDebug> +#include <QtWebSockets/QWebSocketServer> +#include <QtWebSockets/QWebSocket> +#include <QtWebChannel/QWebChannelWebSocketTransport> + #include "ui_dialog.h" class Dialog : public QObject @@ -56,15 +59,18 @@ class Dialog : public QObject Q_OBJECT public: - explicit Dialog(QWebSocketTransport *transport, QObject *parent = 0) + explicit Dialog(const QString &baseUrl, QObject *parent = 0) : QObject(parent) { ui.setupUi(&dialog); dialog.show(); connect(ui.send, SIGNAL(clicked()), SLOT(clicked())); - connect(transport, SIGNAL(baseUrlChanged(QString)), - SLOT(baseUrlChanged(QString))); + + QUrl url = QUrl::fromLocalFile(SOURCE_DIR "/index.html"); + url.setQuery(QStringLiteral("webChannelBaseUrl=") + baseUrl); + ui.output->appendPlainText(tr("Initialization complete, opening browser at %1.").arg(url.toDisplayString())); + QDesktopServices::openUrl(url); } signals: @@ -91,29 +97,55 @@ private slots: ui.input->clear(); } - void baseUrlChanged(const QString &baseUrl) +private: + QDialog dialog; + Ui::Dialog ui; +}; + +// boiler plate code to connect incoming WebSockets to the WebChannel, such that they receive +// messages and can access the published objects. +class TransportHandler : public QObject +{ + Q_OBJECT + +public: + TransportHandler(QWebChannel *channel, QObject *parent = 0) + : QObject(parent) + , m_server(QStringLiteral("QWebChannel Standalone Example Server"), QWebSocketServer::NonSecureMode) + , m_channel(channel) + { + if (!m_server.listen(QHostAddress::LocalHost)) { + qFatal("Failed to open web socket server."); + } + + connect(&m_server, &QWebSocketServer::newConnection, + this, &TransportHandler::handleNewConnection); + } + + QString baseUrl() const { - ui.output->appendPlainText(tr("Initialization complete, opening browser.")); + return m_server.serverUrl().toString(); + } - QUrl url = QUrl::fromLocalFile(SOURCE_DIR "/index.html"); - url.setQuery(QStringLiteral("webChannelBaseUrl=") + baseUrl); - QDesktopServices::openUrl(url); +private slots: + void handleNewConnection() + { + m_channel->connectTo(new QWebChannelWebSocketTransport(m_server.nextPendingConnection())); } private: - QDialog dialog; - Ui::Dialog ui; + QWebSocketServer m_server; + QWebChannel *m_channel; }; int main(int argc, char** argv) { QApplication app(argc, argv); - QWebSocketTransport transport; QWebChannel channel; - channel.connectTo(&transport); + TransportHandler transportHandler(&channel); - Dialog dialog(&transport); + Dialog dialog(transportHandler.baseUrl()); channel.registerObject(QStringLiteral("dialog"), &dialog); diff --git a/examples/standalone/standalone.pro b/examples/standalone/standalone.pro index 7ce0f2b..114be58 100644 --- a/examples/standalone/standalone.pro +++ b/examples/standalone/standalone.pro @@ -1,4 +1,4 @@ -QT += gui webchannel widgets +QT += gui webchannel widgets websockets CONFIG += warn_on |