summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/qml/README3
-rw-r--r--examples/qml/example.qml117
-rw-r--r--examples/qml/index.html59
-rw-r--r--examples/standalone/main.cpp60
-rw-r--r--examples/standalone/standalone.pro2
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