How can I see and storage the data from device in QT?

525 Views Asked by At

enter image description here

my ui with qt .

enter image description here

what I want.

I am in serial communication qt with my device. I make a ui and I can connect my device using ui. I want get a data log from device and display in qt using QTimer.

how can I do it ? and also want save data to csv file.

please help me and let me know how can I solve the problem

below is my code.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSerialPort/QSerialPort>
#include <QSerialPortInfo>
#include <QMessageBox>
#include <QObject>
#include <QIODevice>
#include <QDebug>
#include <QPlainTextEdit>
#include <QDateTime>

QSerialPort serial;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    mSerialport{new QSerialPort}
{
    ui->setupUi(this);

    connect(this->mSerialport,SIGNAL(readyRead()),
            this,SLOT(readSerialData()));
    connect(ui->pushButton_send,
            &QPushButton::clicked, [=](){
        sendMsg(ui->textEdit->toPlainText());

    });

}
MainWindow::~MainWindow()
{
    delete mSerialport;
    delete ui;
}

void MainWindow::on_pushButton_connect_clicked()
{
    mSerialport->setPortName("/dev/ttyUSB0");
    mSerialport->setBaudRate(QSerialPort::Baud9600);
    mSerialport->setDataBits(QSerialPort::Data8);
    mSerialport->setParity(QSerialPort::NoParity);
    mSerialport->setStopBits(QSerialPort::OneStop);
    mSerialport->setFlowControl(QSerialPort::NoFlowControl);
    if (mSerialport->open(QIODevice::ReadWrite))
    { QMessageBox::information(this,tr("connect"),
                               "serialcommunication start");
    }
    else {
        QMessageBox::information(this,tr("fail"),
                                 mSerialport->errorString());
    }

}

void MainWindow::on_pushButton_disconnect_clicked()
{
    QMessageBox::information(this, tr("disconnect"),
                             "serial communication end");
    mSerialport->close();
}

void MainWindow::sendMsg(const QString &msg)
{
    QString str = msg;
    str.append("\n");
    this->mSerialport->write(str.toLatin1());

    ui->comLog->insertPlainText(QDateTime::currentDateTime().
                                toString("yyyy-MM-dd hh:mm:ss") + " [send] " + msg + "\n");
}

void MainWindow::recvMsg(){
    QByteArray msg = this->mSerialport->readAll();
    ui->comLog->insertPlainText(QDateTime::currentDateTime().
                                toString("yyyy-MM-dd hh:mm:ss") + " [recieve] " + msg.toHex().
                                data() + "\n");
}
1

There are 1 best solutions below

6
On

You can see this example.

To store data in log file, you can write data like this.

QByteArray data = serial->readAll();
QFile file("log.csv");
file.open(QIODevice::Append);
file.write(data);
file.close();