Files
AiAnalysis/datamanager.cpp
iorebuild eb1bdc95dc refactor: 通道默认不勾选,CSV不加表头保存原始数据
- 所有16个通道复选框默认不勾选
- CSV文件直接写原始数据,不加ch0-ch15表头
- 修复autoRangeY在无可见通道时的逻辑
2026-04-30 13:26:50 +08:00

118 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "datamanager.h"
#include <QDir>
#include <QDebug>
DataManager::DataManager(QObject *parent)
: QObject(parent)
, m_recording(false)
, m_headerWritten(false)
{
}
DataManager::~DataManager()
{
stopRecording();
}
bool DataManager::startRecording(const QString &dirPath)
{
stopRecording();
QDir dir(dirPath);
if (!dir.exists()) {
if (!dir.mkpath(".")) {
qWarning() << "无法创建目录:" << dirPath;
return false;
}
}
QString fileName = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss") + ".csv";
m_filePath = dir.filePath(fileName);
m_file.setFileName(m_filePath);
if (!m_file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qWarning() << "无法创建文件:" << m_filePath;
return false;
}
m_stream.setDevice(&m_file);
m_headerWritten = false;
m_recording = true;
qDebug() << "开始记录数据到:" << m_filePath;
return true;
}
void DataManager::stopRecording()
{
if (m_recording) {
m_stream.flush();
m_file.close();
m_recording = false;
qDebug() << "停止记录, 文件:" << m_filePath;
}
}
bool DataManager::isRecording() const
{
return m_recording;
}
QString DataManager::currentFilePath() const
{
return m_filePath;
}
void DataManager::appendDataPoint(const QVector<int> &values)
{
if (!m_recording) return;
QStringList parts;
for (int v : values) {
parts << QString::number(v);
}
m_stream << parts.join(",") << "\n";
}
QVector<QVector<double>> DataManager::loadFile(const QString &filePath, QString &error)
{
QVector<QVector<double>> result(16);
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
error = QString("无法打开文件: %1").arg(filePath);
return result;
}
QTextStream stream(&file);
bool firstLine = true;
while (!stream.atEnd()) {
QString line = stream.readLine().trimmed();
if (line.isEmpty()) continue;
// 跳过表头
if (firstLine) {
firstLine = false;
// 检查是否是表头包含非数字字符如ch
if (line.contains("ch", Qt::CaseInsensitive) && !line.at(0).isDigit()) {
continue;
}
}
QStringList parts = line.split(",");
if (parts.size() < 16) continue;
for (int i = 0; i < 16; ++i) {
bool ok;
double val = parts[i].toDouble(&ok);
if (ok) {
result[i].append(val);
}
}
}
file.close();
return result;
}