如何使用QSerialPort读取数据,使用QFile写入文件

How to read data using QSerialPort to write to a file using QFile?

本文关键字:QFile 文件 使用 何使用 QSerialPort 读取 数据      更新时间:2023-10-16

新到c++和Qt,我试图使用微控制器发送一大批数据(由整数和逗号组成)串行放在。csv文件中供Excel使用。到目前为止,我的mainwindow.cpp代码(为了测试的目的,我把所有的动作都放在这里):

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <string>
#include <QtSerialPort/QSerialPort>
#include <QString>
#include <QTextEdit>
#include <QFile>
#include <QTextStream>
QSerialPort *serial;
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    serial = new QSerialPort(this);
    serial->setPortName("/dev/cu.usbmodemfa131");
    serial->setBaudRate(QSerialPort::Baud9600);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);
    serial->open(QIODevice::ReadWrite);
    connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived()));
}
MainWindow::~MainWindow()
{
    delete ui;
    serial->close();
}
void MainWindow::serialReceived()
{
    QString filename = "/Users/me/Documents/myFile/datacollecting.csv";
    QFile file(filename);
    QTextStream out(&file);
    file.open(QIODevice::ReadWrite);
    QByteArray ba;
    ba = serial->readAll();
    out << ba;
    file.close();
}

代码然而给了我一些问题。它根本不可靠,在生成的文件中,它只存储最后10个左右的字符(从几千个字符中)。我已经搜索了周围,但没有找到一种方法来妥善存储大量的数据在串行。有没有更好的方法来实现我上面想要做的事情?新的,所以任何帮助将非常感激!

正如在注释中已经写过的那样,您应该通过添加QIODevice::Append标志以追加模式打开输出文件,以便将所有数据写入文件的末尾。

你也可以连接到error信号,在那里你可以检查可能的错误。请在此处查看串口枚举。

connect(serial, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError)));
void MainWindow::handleError(QSerialPort::SerialPortError error)
{
    ...
}