gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:23:34 31 4
gpt4 key购买 nike

C++ 和 Qt 的新手,我正在尝试使用微 Controller 通过串行发送大量数据(由整数和逗号组成),并将其放入 .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 信号,您可以在其中检查可能的错误。查看串口枚举 here .

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

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

关于c++ - 如何使用 QSerialPort 读取数据以使用 QFile 写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087338/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com