在QT中的两个窗口之间共享websocket连接
Share websocket connection between two windows in QT
我创建了一个名为CSocket:的类
CSocket.h
#ifndef CSOCKET_H
#define CSOCKET_H
#include <QtCore/QObject>
#include <QtWebSockets/QWebSocket>
class CSocket : public QObject
{
Q_OBJECT
public:
explicit CSocket(QObject *parent = nullptr);
void onConnect(const QUrl &url);
void onSendMesssage(QString message);
signals:
void closed();
private slots:
void onConnected();
void onTextMessageReceived(QString message);
private:
QWebSocket m_webSocket;
QUrl m_url;
};
#endif // CSOCKET_H
CSocket.cpp
#include "csocket.h"
#include <QtCore/QDebug>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QMessageBox>
QT_USE_NAMESPACE
CSocket::CSocket(QObject *parent) : QObject(parent)
{
}
void CSocket::onConnect(const QUrl &url)
{
m_url = url;
connect(&m_webSocket, &QWebSocket::connected, this, &CSocket::onConnected);
connect(&m_webSocket, &QWebSocket::disconnected, this, &CSocket::closed);
m_webSocket.open(QUrl(url));
}
void CSocket::onConnected()
{
connect(&m_webSocket, &QWebSocket::textMessageReceived, this, &CSocket::onTextMessageReceived);
}
void CSocket::onTextMessageReceived(QString message)
{
QMessageBox::information(nullptr, "Answer", message, QMessageBox::Ok);
}
void CSocket::onSendMesssage(QString message)
{
m_webSocket.sendTextMessage(message);
}
在主窗口(QWidget(中,我创建了一个连接:
CSocket *socket = new CSocket;
socket->onConnect(QUrl(QStringLiteral("ws://localhost:8080")));
现在的问题是:我如何共享与另一个QWidget或QDialog的连接?我只是不想在新窗口中重新连接。有人知道怎么做吗?
假设在整个应用程序中,您只需要一个所示的连接,那么一个合适的模式将是singleton:
csocket.h
#ifndef CSOCKET_H
#define CSOCKET_H
#include <QObject>
#include <QWebSocket>
class CSocket : public QObject
{
Q_OBJECT
public:
static CSocket *instance();
void onConnect(const QUrl &url);
void onSendMesssage(QString message);
signals:
void closed();
private slots:
void onConnected();
void onTextMessageReceived(QString message);
private:
static CSocket* m_instance;
explicit CSocket(QObject *parent = nullptr);
QWebSocket m_webSocket;
QUrl m_url;
};
#endif // CSOCKET_H
csocket.cpp
#include "csocket.h"
#include <QMessageBox>
CSocket* CSocket::m_instance = nullptr;
CSocket::CSocket(QObject *parent) : QObject(parent)
{
}
CSocket *CSocket::instance()
{
if (m_instance == nullptr)
m_instance = new CSocket;
return m_instance;
}
void CSocket::onConnect(const QUrl &url)
{
m_url = url;
connect(&m_webSocket, &QWebSocket::connected, this, &CSocket::onConnected);
connect(&m_webSocket, &QWebSocket::disconnected, this, &CSocket::closed);
m_webSocket.open(QUrl(url));
}
void CSocket::onConnected()
{
connect(&m_webSocket, &QWebSocket::textMessageReceived, this, &CSocket::onTextMessageReceived);
}
void CSocket::onTextMessageReceived(QString message)
{
QMessageBox::information(nullptr, "Answer", message, QMessageBox::Ok);
}
void CSocket::onSendMesssage(QString message)
{
m_webSocket.sendTextMessage(message);
}
因此,与其使用构造函数,不如使用instance()
方法:
//mainwindow
CSocket *socket = CSocket::instance();
socket->onConnect(QUrl(QStringLiteral("ws://localhost:8080")));
// another window
CSocket *socket = CSocket::instance();
正如您所看到的,只有一个CSocket被所有窗口共享。
相关文章:
- 如何在Qt中连接来自不同窗口的两个对象?
- 从两个窗口返回前景窗口
- 在两个窗口中连接到相同的信号
- 在QT中的两个窗口之间共享websocket连接
- 切换两个主窗口
- 在C Win32中的两个窗口之间切换
- 窗口如何处理加载两个不同版本的 DLL
- SDL2在不同线程中的两个窗口
- 在QT中的两个窗口之间进行通信的最佳方法是什么?
- 在一个应用程序中创建两个窗口
- 两个窗口-一个由线程随机输出修改
- 如何使用GLUT创建两个主窗口
- 使用矢量模板创建两个sdl窗口只会创建一个窗口
- 比较两个IPv6地址及其掩码(窗口)
- 如何使用OpenGL在Windows上的同一应用程序中的两个单独的3D窗口中进行绘制
- 如何让窗口线程同时使用两个函数
- WIN32,两个窗口使用相同的 wndproc.为什么
- 具有两个窗口的C++中的应用程序.任务栏中显示的一个窗口.另一个未显示
- 弹出窗口.如何显示全文内容和另外两个问题
- 单独线程中的两个窗口同时处于活动状态