如何在 QT 中查看和存储来自设备的数据?

Posted

技术标签:

【中文标题】如何在 QT 中查看和存储来自设备的数据?【英文标题】:How can I see and storage the data from device in QT? 【发布时间】:2017-09-18 01:00:32 【问题描述】:

我的 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),
    mSerialportnew 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");

【问题讨论】:

您的实际问题是什么?从设备读取?使用 QTimer?显示数据?请避免包含不必要的信息。见How to Ask。 【参考方案1】:

你可以看到this example。

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

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

【讨论】:

感谢您的回复。我添加代码 //void MainWindow::readData() QByteArray data = serial->readAll(); QFile 文件("log.csv"); file.open(QIODevice::Append);文件.写(数据);文件.close(); // 并执行,但什么也没发生,也找不到 log.csv 。不使用上层代码,如何解决问题?我应该使用can bus吗? @eyllanesc 感谢您的回复。我写的代码如你所知。但 qt 通知 QIODevice:: write() 是正确的。括号里应该写什么? @kararara 打扰一下,试试file.open(QIODevice::Append|QIODevice::WriteOnly);file.open(QIODevice::WriteOnly); @eyllanesc 没有错误谢谢。但在添加此代码之前和之后没有任何变化..我似乎没有任何效果.. log.csv更改为log.csv的完整路径

以上是关于如何在 QT 中查看和存储来自设备的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios设备中存储来自url的json数据并在本地使用它

在 Vue 中,我如何查看存储在其他设备本地存储中的数据

Qt / C++ - 如何存储配置数据

如何使用 Qt 加密/解密文件内容?

Qt:如何在模型/视图设置中同步对来自多个线程的数据的访问?

Qt的QString中储存汉字,如何查看汉字的编码