Название: Как вывести структуру,полученной из QTcpSocket на форму
Отправлено: User162 от Июнь 26, 2013, 08:57
Всем привет! Есть сервер который получает данные, согласно структуре: 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; }
Былоб хорошо, если можно на примере показать)))
Название: Re: Как вывести структуру,полученной из QTcpSocket на форму
Отправлено: Bepec от Июнь 26, 2013, 09:06
Код превращения в строку. QString stringOut ; QDebug debug( &stringOut); int x = 5; int y = 6; debug << x << y; emit info(stringOut);
Объявление сигнала в сервере. signals: void info(QString); Объявление слота в mainWindow private slots: void inServerInfo(QString); Тело слота void mainWindow::inServerInfo(QString inInfo) { ui.label->setText(inInfo); }
А сконнектить как сигнал и слот ты знать должен падаван юный.
Название: Re: Как вывести структуру,полученной из QTcpSocket на форму
Отправлено: User162 от Июнь 26, 2013, 09:10
Сртёмно как то.... А если в классе Server передать?
Название: Re: Как вывести структуру,полученной из QTcpSocket на форму
Отправлено: Bepec от Июнь 26, 2013, 09:15
Это вариант с сигналами. А можно тупо сделать у сервера метод, возвращающий структуру. Аля public: const MeteoData getMeteoData(); А в теле мы возвращаем переменную, в которую записали структуру. const MeteoData Server::getMeteoData() { return meteoData_; }
|