Всем привет!
Есть сервер который получает данные, согласно структуре:
server.h
#ifndef SERVER_H
#define SERVER_H
#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>
class Server : public QObject
{
Q_OBJECT
public:
explicit Server(QObject *parent = 0);
struct MeteoData
{
quint8 TypePack,
DevNo,
Year,
Month,
Day,
Hour,
Min,
Sec;
float wind_speed,
wind_direction,
temperature,
atmospheric_pressure,
hummidity;
}md;
signals:
public slots:
virtual void slotNewConnection();
void slotReadClient();
private:
QTcpServer *tcp_server;
};
#endif // SERVER_H
server.cpp
#include "server.h"
Server::Server(QObject *parent) :
QObject(parent)
{
tcp_server = new QTcpServer(this);
if (!tcp_server->listen(QHostAddress::Any,48000))
{
qDebug()<<"Unable to start the server: %1." << tcp_server->errorString();
tcp_server->close();
return;
}
connect(tcp_server, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
}
void Server::slotNewConnection()
{
QTcpSocket* ClientSocket = tcp_server->nextPendingConnection();
connect(ClientSocket, SIGNAL(disconnected()), ClientSocket, SLOT(deleteLater()));
connect(ClientSocket, SIGNAL(readyRead()), this, SLOT(slotReadClient()));
}
void Server::slotReadClient()
{
MeteoData md;
QTcpSocket* ClientSocket = (QTcpSocket*)sender();
quint32 data_size = 0;
QDataStream in(ClientSocket);
in.setVersion(QDataStream::Qt_4_0);
in.setByteOrder(QDataStream::LittleEndian);
if (ClientSocket->bytesAvailable() < (int)sizeof(quint32))
{
qDebug() << "ERROR: not enought header";
}
in >> data_size;
if (ClientSocket->bytesAvailable() < data_size)
{
qDebug() << "ERROR: not enought data";
}
in >> md.TypePack >> md.DevNo >> md.Year >> md.Month >> md.Day >> md.Hour >> md.Min >> md.Sec >> md.wind_speed >> md.wind_direction >> md.temperature >> md.atmospheric_pressure >> md.hummidity;
qDebug() << "TypePack" << md.TypePack << "\n"
<< "DevNo" << md.DevNo << "\n"
<< "Year" << md.Year << "\n"
<< "Month" << md.Month << "\n"
<< "Day" << md.Day << "\n"
<< "Hour" << md.Hour << "\n"
<< "Min" << md.Min << "\n"
<< "Sec" << md.Sec << "\n"
<< "wind_speed" << md.wind_speed << "\n"
<< "wind_direction" << md.wind_direction << "\n"
<< "temperature" << md.temperature << "\n"
<< "atmospheric_pressure" << md.atmospheric_pressure << "\n"
<< "hummidity" << md.hummidity << "\n";
}
Необходимо пробросить эту структуру в MainWindow, чтобы потом вывести значения в лэйблы. помогите реализовать. Знаю что можно создать пустую структуру и передать по коннекту. а проще можно?
#ifndef testmw
#define testmw
#include <QMainWindow>
#include "TCP_Server/server.h"
namespace Ui {
class testmw;
}
class testmw : public QMainWindow
{
Q_OBJECT
public:
explicit testmw(QWidget *parent = 0);
~testmw();
private:
Ui::testmw *ui;
Server *srv;
};
#endif // testmw
#include "ui_testmw.h"
#include <QtGui>
testmw::testmw(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::testmw)
{
ui->setupUi(this);
srv = new Server(this);
ui->label->setText(QString::number(srv->md.Sec));//хотел так, но не вышло
}
testmw::~testmw()
{
delete ui;
}
Былоб хорошо, если можно на примере показать)))