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

时间:2016-08-22 19:29:58

标签: c++ qt serial-port

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个左右(几千个)字符。我一直在搜索,但还没有找到一种方法来通过串行正确存储大块数据。有没有更好的方法来实现我上面尝试做的事情?新的,所以任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

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

您还可以连接到error信号,以便检查可能的错误。请参阅串口枚举here

connect(serial, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError)));

void MainWindow::handleError(QSerialPort::SerialPortError error)
{
    ...
}