磁场连续性是磁场传感器的重要测试内容,但目前没有合适的软件可用,研究人员一般是自行计算,但报告内容不标示清楚的话难以理解,也无法评判连续性指标是否合格。因此,需要开发一款专门用于磁场连续性测试的软件,所有数据都在同一框架下计算,这样就能清楚的反映在测试报告里。
目录
1 功能需求
1 打开多个文件
2 每个文件的时间段可以指定
3 可根据时间段绘图
4 可保存为图片
2 技术思路
程序注重的是曲线图,因此无需查看数据内容,用列表显示加载文件即可。时间段的指定可以用spinBox来指定。
3 开发流程
1 框架搭建
首先新建main window应用,并设计UI界面。
UI的基本逻辑是,打开文件后,显示在列表上,同时绘图。点击文件,可切换其时间段,通过spinBox可以切换具体时间,同时刷新绘图。
2 打开文件并绘图
打开功能承载两项任务,就是打开数据并绘图。
// 指定多个文件
QStringList files = QFileDialog::getOpenFileNames(this,"Open files","","*.txt");
if(files.isEmpty())
return;
// 逐个文件读取并绘图
ui->plot->clearGraphs();
ui->plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
tMat.clear();
vMat.clear();
QVector<double> xmin,xmax,ymin,ymax;
for(int i = 0; i<files.count(); i++)
{
// 读取时间和测量值 形成x和y
QFile file(files.at(i));
if(!file.open(QIODevice::ReadOnly))
return;
QTextStream in(&file);
QString line;
QVector<double> t,v;
// 读文件头 共7行
line = in.readLine();
line = in.readLine();
line = in.readLine();
QStringList info = line.split(" ");
QString name = info.at(3).right(3);
line = in.readLine();
line = in.readLine();
line = in.readLine();
line = in.readLine();
// 读表格数据
while(!in.atEnd()){
line = in.readLine();
QStringList list = line.split(" ",QString::SkipEmptyParts);
double tim = list.at(0).toDouble();
t<<hms2dec(tim)/3600.0;
v<<list.at(1).toDouble();
}
file.close();
// 存储到大矩阵
tMat<<t;
vMat<<v;
// 获取当前范围
xmin<<getMin(t);
xmax<<getMax(t);
ymin<<