2

在此处输入图像描述

我的 qt 用户界面。

在此处输入图像描述

我想要的是。

我正在与我的设备进行串行通信。我制作了一个 ui,我可以使用 ui 连接我的设备。我想从设备获取数据日志并使用 QTimer 在 qt 中显示。

我该怎么做 ?并且还希望将数据保存到 csv 文件。

请帮助我,让我知道我该如何解决这个问题

下面是我的代码。

#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");
}
4

1 回答 1

0

你可以看到这个例子

要将数据存储在日志文件中,您可以像这样写入数据。

QByteArray data = serial->readAll();
QFile file("log.csv");
file.open(QIODevice::Append);
file.write(data);
file.close();
于 2017-09-18T03:21:44.463 回答