You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.7 KiB
C++
109 lines
2.7 KiB
C++
|
5 years ago
|
#include "webClient.h"
|
||
|
|
#include <QJsonDocument>
|
||
|
|
#include <QJsonDocument>
|
||
|
|
#include <QFile>
|
||
|
|
#include <QDateTime>
|
||
|
|
#include <QApplication>
|
||
|
|
#include <QPixmap>
|
||
|
|
|
||
|
|
webClient::webClient(QObject *parent /*= Q_NULLPTR*/):
|
||
|
|
QObject(parent)
|
||
|
|
{
|
||
|
|
connect(&m_webSocket, &QWebSocket::connected, this, &webClient::onConnected);
|
||
|
|
connect(&m_webSocket, &QWebSocket::disconnected, this, &webClient::onDisConnected);
|
||
|
|
connect(&m_webSocket, &QWebSocket::textMessageReceived, this, &webClient::onTextMessageReceived);
|
||
|
|
connect(&m_webSocket, &QWebSocket::binaryMessageReceived, this, &webClient::onBinaryMessageReceived);
|
||
|
|
}
|
||
|
|
|
||
|
|
webClient::~webClient()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
void webClient::openUrl(QString url)
|
||
|
|
{
|
||
|
|
m_webSocket.open(QUrl(url));
|
||
|
|
}
|
||
|
|
|
||
|
|
void webClient::onClose()
|
||
|
|
{
|
||
|
|
m_webSocket.close();
|
||
|
|
}
|
||
|
|
|
||
|
|
Q_SLOT void webClient::onConnected()
|
||
|
|
{
|
||
|
|
emit sgConnect(true);
|
||
|
|
}
|
||
|
|
|
||
|
|
Q_SLOT void webClient::onDisConnected()
|
||
|
|
{
|
||
|
|
emit sgConnect(false);
|
||
|
|
}
|
||
|
|
|
||
|
|
Q_SLOT void webClient::onTextMessageReceived(QString message)
|
||
|
|
{
|
||
|
|
emit sgRecvStrData(message);
|
||
|
|
}
|
||
|
|
|
||
|
|
Q_SLOT void webClient::onBinaryMessageReceived(const QByteArray &message)
|
||
|
|
{
|
||
|
|
emit sgRecvBinData(message);
|
||
|
|
}
|
||
|
|
|
||
|
|
void webClient::onSendJson(QJsonObject &obj)
|
||
|
|
{
|
||
|
|
QJsonDocument doc = QJsonDocument(obj);
|
||
|
|
QByteArray bData = doc.toJson();
|
||
|
|
m_webSocket.sendBinaryMessage(bData);
|
||
|
|
}
|
||
|
|
|
||
|
|
void webClient::sendSmallImage(QImage &img)
|
||
|
|
{
|
||
|
|
QJsonObject imageData;
|
||
|
|
imageData["width"] = img.width();
|
||
|
|
imageData["height"] = img.height();
|
||
|
|
imageData["format"] = img.format();
|
||
|
|
QByteArray imgData;
|
||
|
|
imgData.append((char*)img.bits(), img.byteCount());
|
||
|
|
imageData["data_base64"] = QString(imgData.toBase64());
|
||
|
|
imageData["image_data"] = 1;
|
||
|
|
onSendJson(imageData);
|
||
|
|
}
|
||
|
|
|
||
|
|
void webClient::parasImage(QJsonObject &imgData)
|
||
|
|
{
|
||
|
|
if (imgData.contains("image_data"))
|
||
|
|
{
|
||
|
|
QByteArray imgbase64;
|
||
|
|
if (imgData["data_base64"].isString())
|
||
|
|
{
|
||
|
|
imgbase64 = imgData["data_base64"].toString().toUtf8();
|
||
|
|
}
|
||
|
|
QByteArray imgArr = QByteArray::fromBase64(imgbase64);
|
||
|
|
|
||
|
|
QString imgPath = QApplication::applicationDirPath() + QString("/%1.jpg").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh_mm_ss zzz"));
|
||
|
|
QPixmap newImg;
|
||
|
|
newImg.loadFromData(imgArr);
|
||
|
|
newImg.save(imgPath);
|
||
|
|
|
||
|
|
int width = imgData["width"].toInt();
|
||
|
|
int height = imgData["height"].toInt();
|
||
|
|
int format = imgData["format"].toInt();
|
||
|
|
|
||
|
|
QImage::Format qfmt = static_cast<QImage::Format>(format);
|
||
|
|
QImage img((uchar *)imgArr.data(), width, height, qfmt);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void webClient::saveJson(QJsonObject obj)
|
||
|
|
{
|
||
|
|
QJsonDocument doc = QJsonDocument(obj);
|
||
|
|
QByteArray data = doc.toJson();
|
||
|
|
QString filePath = QApplication::applicationDirPath() + QString("/file%1.json").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh_mm_ss zzz"));
|
||
|
|
QFile file(filePath);
|
||
|
|
if (file.open(QIODevice::WriteOnly))
|
||
|
|
{
|
||
|
|
file.write(data);
|
||
|
|
file.close();
|
||
|
|
}
|
||
|
|
}
|