写一段QT通过USB读取数据并绘制波形然后存储的代码
时间: 2023-04-08 12:03:32 浏览: 138
QTqt小项目,使用qcustomplot实时绘制串口波形数据并存储到数据库,可查看历史波形
以下是一段QT通过USB读取数据并绘制波形然后存储的代码:
```c++
#include <QApplication>
#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QTimer>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QVector>
#include <QChart>
#include <QChartView>
#include <QLineSeries>
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建主窗口
QMainWindow window;
window.setWindowTitle("USB波形绘制");
window.resize(800, 600);
// 创建串口对象
QSerialPort serialPort;
serialPort.setPortName("COM1");
serialPort.setBaudRate(QSerialPort::Baud9600);
serialPort.setDataBits(QSerialPort::Data8);
serialPort.setParity(QSerialPort::NoParity);
serialPort.setStopBits(QSerialPort::OneStop);
serialPort.setFlowControl(QSerialPort::NoFlowControl);
// 打开串口
if (!serialPort.open(QIODevice::ReadOnly)) {
qDebug() << "无法打开串口";
return -1;
}
// 创建定时器
QTimer timer;
timer.setInterval(50);
// 创建波形数据
QVector<QPointF> data;
// 创建折线图
QLineSeries *series = new QLineSeries();
QChart *chart = new QChart();
chart->addSeries(series);
chart->setTitle("USB波形");
chart->createDefaultAxes();
chart->legend()->hide();
// 创建图表视图
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
// 将图表视图添加到主窗口
window.setCentralWidget(chartView);
// 创建文件对象
QFile file(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss") + ".txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "无法创建文件";
return -1;
}
// 创建文本流对象
QTextStream stream(&file);
// 连接定时器的timeout信号和槽函数
QObject::connect(&timer, &QTimer::timeout, [&]() {
// 读取串口数据
QByteArray data = serialPort.readAll();
// 将数据转换为浮点数
float value = data.toFloat();
// 将数据添加到波形数据中
data.append(QPointF(data.size(), value));
// 将数据添加到折线图中
series->append(data.size(), value);
// 将数据写入文件
stream << QDateTime::currentDateTime().toString("yyyy-MM-dd_hh:mm:ss.zzz") << "," << value << "\n";
});
// 启动定时器
timer.start();
// 显示主窗口
window.show();
// 运行应用程序
return a.exec();
}
```
阅读全文