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个左右(几千个)字符。我一直在搜索,但还没有找到一种方法来通过串行正确存储大块数据。有没有更好的方法来实现我上面尝试做的事情?新的,所以任何帮助将不胜感激!
答案 0 :(得分:1)
正如已在评论中写的那样,您应该通过添加QIODevice::Append
标志以追加模式打开输出文件,以便将所有数据写入文件的末尾。
您还可以连接到error
信号,以便检查可能的错误。请参阅串口枚举here。
connect(serial, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError)));
void MainWindow::handleError(QSerialPort::SerialPortError error)
{
...
}