Считывание данных с сервера и визуализация на Qt
ПО обеспечивает визуализацию точек на координатной плоскости. Каждая точка характеризуется идентификатором (ID). Информация о точках передается ТСР-сервером папка accel: https://drive.google.com/drive/folders/1Hf3NgNfmnn1sVswDRjVUW4E3Vg5iogSt?usp=sharing . Также в этой ссылке все исходники моей программы.
Обозначу две проблемы с которыми я столкнулся. Первая проблема заключается в том, что появляется точка с ID=-500 при первичном запуске сервера, хотя на самом сервере ее пока нет, как я понял мне нужно организовать поиск конца пакета, но пока не представляю как.
Вторая проблема- это некорректное отображение скорости. Для расчета скорости нужно считать время между вызовами readAll и делить на него объем принятых данных - так мне подсказали, но реализовать это я пока не додумался.
Код программы:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTime>
#include <QTimer>
#include <QElapsedTimer>
#include <QString>
#include <QByteArray>
#include <QPixmap>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
timer = new QTimer(this);
timer->setInterval(100);
connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));
}
MainWindow::~MainWindow()
{
delete ui;
delete timer;
delete socket;
}
void MainWindow::on_pushButton_clicked()
{
QString address = ui->lineEdit->text();
int port = ui->spinBox->value();
qDebug() << address << " " << port;
socket = new QTcpSocket(this);
socket->connectToHost(address, port);
if (socket->waitForConnected(5000))
{
ui->label_13->setText("Connected!");
timer->start(100);
}
}
void MainWindow::updateTime()
{
QPixmap pix(101,101);
QPainter paint(&pix);
paint.fillRect(0,0,101,101, Qt::white);
QTime t;
t.start();
socket->waitForReadyRead(5000);
QByteArray answer = socket->readAll();
int timeelapsed = t.elapsed();
double finish = timeelapsed*0.1;
if (finish!=0)
{
double speed = answer.size()/finish;
ui->label_12->setText(QString::number(speed));
}
int* i = (int*)answer.data();
ui->label_5->setText(QString::number(i[0]));
ui->label_7->setText(QString::number(i[1]));
ui->label_9->setText(QString::number(i[2]));
ui->label_16->setText(QString::number(i[3]));
ui->label_14->setText(QString::number(i[4]));
ui->label_15->setText(QString::number(i[5]));
paint.fillRect(i[1] + 50, -i[2] + 50, 3, 3 , Qt::red);
paint.fillRect(i[4] + 50, -i[5] + 50, 3, 3, Qt::black);
ui->label_3->setPixmap(pix);
}
void MainWindow::on_pushButton_2_clicked()
{
// ui->label_5->clear();
// ui->label_7->clear();
socket->close();
delete socket;
ui->label_13->setText("Disconnected!");
// QApplication::quit();
}
