#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
m_myTestClass = new MyTestClass(this);
m_webChannel = new QWebChannel(this);
m_webChannel->registerObject("mytestclass", m_myTestClass);
startServer();
MainWindow::~MainWindow()
delete ui;
void MainWindow::startServer()
m_websocketServer = new QWebSocketServer("testWebchannel", QWebSocketServer::NonSecureMode, this);
if(!m_websocketServer->listen(QHostAddress::Any, 12345))
qDebug() << "websocket server listen failed, error: " << m_websocketServer->errorString();
return;
connect(m_websocketServer, &QWebSocketServer::newConnection, this, &MainWindow::onNewConnection);
qDebug() << "startServer";
void MainWindow::onNewConnection()
QWebSocket* client = m_websocketServer->nextPendingConnection();
qDebug() << (QString("Homay robot server has new connection from %1.%2").arg(client->peerAddress().toString()).arg(client->localPort()));
auto pTransport = new WebSocketTransport(client);
connect(pTransport, &WebSocketTransport::messageReceived, this, &MainWindow::onTransportMessageReceived);
m_webChannel->connectTo(pTransport);
void MainWindow::onTransportMessageReceived(const QJsonObject &message, QWebChannelAbstractTransport *transport)
qDebug() << "onTransportMessageReceived: " << message;
导出类 MyTestClass,供js调用。
代码中 WebSocketTransport 类代码,取自 Qt安装目录的 Qt5.12.0\Examples\Qt-5.12.0\webchannel\shared 目录下的 websockettransport.h websockettransport.cpp。
此处省略。