tmp
来源:互联网 发布:国际金价软件 编辑:程序博客网 时间:2024/06/07 17:59
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); //设置坐标系 ui->qcustomplot->addGraph(); //ui->qcustomplot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom); ui->qcustomplot->xAxis2->setPadding(0); ui->qcustomplot->xAxis->setLabel("V"); ui->qcustomplot->yAxis->setLabel("P"); ui->qcustomplot->yAxis->setAutoTicks(true); ui->qcustomplot->yAxis->setAutoTickStep(true); ui->qcustomplot->yAxis->setAutoSubTicks(true); ui->qcustomplot->xAxis2->setVisible(true); ui->qcustomplot->xAxis2->setTickLabels(false); ui->qcustomplot->yAxis2->setVisible(true); ui->qcustomplot->yAxis2->setTickLabels(false); ui->qcustomplot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5)); connect(ui->qcustomplot->xAxis, SIGNAL(rangeChanged(QCPRange)), ui->qcustomplot->xAxis2, SLOT(setRange(QCPRange))); connect(ui->qcustomplot->yAxis, SIGNAL(rangeChanged(QCPRange)), ui->qcustomplot->yAxis2, SLOT(setRange(QCPRange))); //设置按钮风格 const QList<QPushButton*> allButtons = this->findChildren<QPushButton *>(); foreach (QPushButton *button, allButtons) button->setStyleSheet(QString::fromLocal8Bit("*{font-size:14px;color:#FFFFFF;background-color:#009966;font-family:\"微软雅黑\";} \n *::disabled{color:white;background-color:gray;}")); //实例化KCV600并自动连接 m_pKCV600 = new KCV_600(this); m_pKCV600->ConnectDevice(); //实例化DP700并自动连接打开显示 m_pDP700 = new DP700(this); m_pDP700->ConnectDevice(); m_pDP700->OpenCloseDevice(true); m_pDP700->OpenDisplay(true); //实例化数据表model m_pDefaultModel = new QSqlTableModel; m_pAutoScanModel = new QSqlTableModel; m_pTableView = new QTableView; QString defaultTable("measure_default"); connectModelView(m_pDefaultModel,m_pTableView,defaultTable); ui->tableViewLayout->addWidget(m_pTableView); connect(ui->lineEdit_5,SIGNAL(returnPressed()),this,SLOT(on_pushButton_7_clicked()));}MainWindow::~MainWindow(){ delete ui; delete m_pDefaultModel; delete m_pTableView; delete m_pAutoScanModel;}bool MainWindow::insertData(QSqlTableModel *model, double vol, double cap, double cur,int row){ QDateTime currentTime = QDateTime::currentDateTime(); QString date = currentTime.toString("yyyy-MM-dd"); QString time = currentTime.toString("hh:mm:ss"); QSqlRecord record = model->record(); record.setValue("voltage",vol); record.setValue("capacity",cap); record.setValue("current",cur); record.setValue("date",date); record.setValue("time",time); record.setValue("name",ui->lineEdit->text()); record.setValue("temp",ui->lineEdit_2->text()); record.setValue("No",ui->LabelSpinBox->text()); record.setValue("hum",ui->lineEdit_4->text()); if(!model->insertRecord(row,record)) { qDebug() <<model->lastError().text(); return false; } if(model->submitAll()) qDebug() << "submitAll success"; else qDebug() << "submitAll failed"; return true;}void MainWindow::connectModelView(QSqlTableModel *model, QTableView *view,QString table){ model->setTable(table); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->select(); //设置表格头 model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("电压")); model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit("电容")); model->setHeaderData(2,Qt::Horizontal,QString::fromLocal8Bit("电流")); model->setHeaderData(3,Qt::Horizontal,QString::fromLocal8Bit("日期")); model->setHeaderData(4,Qt::Horizontal,QString::fromLocal8Bit("时间")); model->setHeaderData(5,Qt::Horizontal,QString::fromLocal8Bit("名称")); model->setHeaderData(6,Qt::Horizontal,QString::fromLocal8Bit("温度")); model->setHeaderData(7,Qt::Horizontal,QString::fromLocal8Bit("编号")); model->setHeaderData(8,Qt::Horizontal,QString::fromLocal8Bit("湿度")); //实例化数据表view view->setModel(model); view->setEditTriggers(QTableView::NoEditTriggers); view->setSelectionBehavior(QAbstractItemView::SelectRows); view->hideColumn(5); view->hideColumn(6); view->hideColumn(7); view->hideColumn(8); view->horizontalHeader()->setSectionResizeMode(0,QHeaderView::Stretch); view->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Stretch); view->horizontalHeader()->setSectionResizeMode(2,QHeaderView::Stretch); view->horizontalHeader()->setSectionResizeMode(3,QHeaderView::Stretch); view->horizontalHeader()->setSectionResizeMode(4,QHeaderView::Stretch);}bool MainWindow::on_pushButton_7_clicked(){ ui->qcustomplot->graph(0)->clearData(); if(ui->LabelSpinBox->text() == "0") { QMessageBox question(QMessageBox::NoIcon,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("样品编号为默认值,是否在不填写编号的情况下测量")); question.setStandardButtons(QMessageBox::Yes|QMessageBox::No); question.setButtonText(QMessageBox::Yes,QString::fromLocal8Bit("确定")); question.setButtonText(QMessageBox::No,QString::fromLocal8Bit("取消")); if(question.exec() == QMessageBox::No) return false; } QSqlQuery query; bool success = query.exec(QString("create table measure_%1(voltage double,capacity double,current double,date varchar(20),time varchar(20),name varchar(20),temp varchar(20),no varchar(20),hum varchar(20))").arg(ui->LabelSpinBox->text())); if(success) qDebug() << "table create success"; else { qDebug() << "table create fail"; qDebug() <<query.lastError().text(); if(query.lastError().text().mid(0,5) == "table") { QMessageBox question(QMessageBox::NoIcon,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("当前编号测量表格已存在,是否替换")); question.setStandardButtons(QMessageBox::Yes|QMessageBox::No); question.setButtonText(QMessageBox::Yes,QString::fromLocal8Bit("确定")); question.setButtonText(QMessageBox::No,QString::fromLocal8Bit("取消")); if(question.exec() == QMessageBox::No) return false; } } //建立model-view模型 QString table("measure_"); table += ui->LabelSpinBox->text(); connectModelView(m_pAutoScanModel,m_pTableView,table); //发送指令并返回数据,其中DP700发送后检查电压值是否设定正确,KCV600发送后等待1s读取数据 QVector<double> buff(20); double voltage = ui->lineEdit_5->text().toDouble(); if(voltage <0 || voltage>35) { QMessageBox::warning(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("电压范围为0-35V")); return false; } if(!m_pDP700->SetVoltage(voltage)) return false; General::Wait(2); buff = m_pKCV600->GetCurrentValue(); if(!insertData(m_pAutoScanModel,buff.at(0),buff.at(1),buff.at(2))) { QMessageBox::warning(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("插入数据失败,请检查是否正确填写数据信息")); return false; } //绘制曲线图 ui->qcustomplot->graph(0)->addData(buff.at(0),buff.at(1)); ui->qcustomplot->graph(0)->rescaleAxes(true); ui->qcustomplot->replot(); buff.clear(); return true; QCPGraph *graph = ui->qcustomplot->graph(0); graph->addData(buff.at(0),buff.at(1)); graph->rescaleValueAxis(true); ui->qcustomplot->yAxis->setOffset(-(ui->qcustomplot->width()/2-15)); ui->qcustomplot->replot(); buff.clear(); return true;}/*************************************************Function: // 按钮槽函数Description: // 电容电压自动扫描测量及绘图Return: // 无*************************************************/bool MainWindow::on_pushButton_9_clicked(){/*****************************************************数据准备部分**********************************************************/ ui->qcustomplot->graph(0)->clearData(); /*用于当前的绘图数据,并不保存到数据库*/ QVector<double> lowKey,lowValue; QVector<double> highKey,highValue; double minValue = ui->comboBox_2->text().toDouble(); double maxValue = ui->comboBox->text().toDouble(); double stepValue = ui->comboBox_4->text().toDouble(); if(ui->comboBox_4->text().toDouble() == 0) { QMessageBox::warning(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("电压步进值为零")); return false; } if(ui->comboBox_4->text().toDouble() >= ui->comboBox->text().toDouble()||ui->comboBox_4->text().toDouble() >= ui->comboBox_2->text().toDouble()) { QMessageBox::warning(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("电压步进值大于或等于电压设定值")); return false; }/**********************************************************数据库部分*****************************************************************/ QSqlQuery query; bool success = query.exec(QString("create table measure_%1(voltage double,capacity double,current double,date varchar(20),time varchar(20),name varchar(20),temp varchar(20),no varchar(20),hum varchar(20))").arg(ui->LabelSpinBox->text())); if(success) qDebug() << "table create success"; else { qDebug() << "table create fail"; qDebug() <<query.lastError().text(); if(query.lastError().text().mid(0,5) == "table") { QMessageBox question(QMessageBox::NoIcon,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("当前编号测量表格已存在,是否替换")); question.setStandardButtons(QMessageBox::Yes|QMessageBox::No); question.setButtonText(QMessageBox::Yes,QString::fromLocal8Bit("确定")); question.setButtonText(QMessageBox::No,QString::fromLocal8Bit("取消")); if(question.exec() == QMessageBox::No) return false; else { bool success = query.exec(QString("drop table measure_%1").arg(ui->LabelSpinBox->text())); if(success) qDebug() << "table delete success"; else { qDebug() << "table delete fail"; qDebug() << query.lastError().text(); } success = query.exec(QString("create table measure_%1(voltage double,capacity double,current double,date varchar(20),time varchar(20),name varchar(20),temp varchar(20),no varchar(20),hum varchar(20))").arg(ui->LabelSpinBox->text())); if(success) qDebug() << "table create success"; else { qDebug() << "table create fail"; qDebug() << query.lastError().text(); } } } } /*建立model-view模型*/ QString table("measure_"); table += ui->LabelSpinBox->text(); connectModelView(m_pAutoScanModel,m_pTableView,table);/**********************************************************测量逻辑部分*****************************************************************/ //正向电压自动扫描 for(double voltage=0;voltage<=maxValue+0.03;voltage+=stepValue) { QVector<double> buff(20); //发送电压指令 if(!m_pDP700->SetVoltage(voltage))return false; General::Wait(2); buff = m_pKCV600->GetCurrentValue(); if(buff.empty())break; //插入数据,若插入失败则跳出当前循环 if(!insertData(m_pAutoScanModel,buff.at(0),buff.at(1),buff.at(2))) { QMessageBox::warning(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("插入数据失败,请确认数据库未被其他程序占用及数据填写完整")); return false; } //当发送数据,读取数据,插入数据到数据库中均正常时,开始绘图并自动调整坐标轴比例 lowKey.append(buff.at(0)); lowValue.append(buff.at(1)); QCPGraph *graph = ui->qcustomplot->graph(0); graph->addData(buff.at(0),buff.at(1)); graph->rescaleAxes(); ui->qcustomplot->replot(); buff.clear(); } //打开继电器 if(!m_pKCV600->OpenRelay()) return false; //反向电压自动扫描 for(double voltage=0;voltage<=minValue+0.03;voltage+=stepValue) { QCPGraph *graph = ui->qcustomplot->graph(0); if(voltage == 0) { QSqlRecord record = m_pAutoScanModel->record(0); highKey.append(0); highValue.append(record.value("capacity").toDouble()); continue; } QVector<double> buff(20); //发送电压指令 if(!m_pDP700->SetVoltage(voltage)) return false; General::Wait(2); //读取数据,若读取失败则数据为空,并跳出该次循环 buff = m_pKCV600->GetCurrentValue(); if(buff.empty()) break; //插入数据,若插入失败则跳出当前循环 if(!insertData(m_pAutoScanModel,buff.at(0)*-1,buff.at(1),buff.at(2))) { QMessageBox::warning(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("插入数据失败,请检查是否正确填写数据信息")); return false; } //当发送数据,读取数据,插入数据到数据库中均正常时,开始绘图并自动调整坐标轴比例 highKey.append(buff.at(0)*-1); highValue.append(buff.at(1)); graph->addData(buff.at(0)*-1,buff.at(1)); graph->rescaleAxes(); ui->qcustomplot->replot(); buff.clear(); } if(!m_pKCV600->CloseRelay()) return false; else m_pDP700->SetVoltage(0);/*********************************************************************************************************************//******************************************坐标轴显示处理***************************************************************/ //第一步:获取正向电容的最大值和反向电容的最大值,将其设为y轴的显示范围,并确定缩放比例 ui->qcustomplot->graph(0)->clearData(); double lowMaxValue = General::QVectorDoubleMax(lowValue); double highMaxValue = General::QVectorDoubleMax(highValue); double scale = lowMaxValue/highMaxValue; //第二步:确定y轴的显示范围为正向电容的2.1倍,确定tickstep为正向电容最大值的1/4 ui->qcustomplot->yAxis->setRange(0,lowMaxValue*2.1); ui->qcustomplot->yAxis->setAutoSubTicks(false); ui->qcustomplot->yAxis->setAutoTickStep(false); ui->qcustomplot->yAxis->setTickStep(lowMaxValue/4); ui->qcustomplot->yAxis->setSubTickCount(4); ui->qcustomplot->xAxis->setRange(minValue,maxValue); ui->qcustomplot->yAxis->setAutoTickLabels(false); //第三步:修改y轴的label QVector<QString> labels; labels << "" << QString::number((int)(lowMaxValue/4)) << QString::number((int)(lowMaxValue/2)) <<QString::number((int)(lowMaxValue*3/4)) <<QString::number((int)lowMaxValue)<<QString::number((int)(highMaxValue/4))<<QString::number((int)(highMaxValue/2))<<QString::number((int)(highMaxValue*3/4))<<QString::number((int)highMaxValue); //第四步:将反向电压的数据按缩放比例进行压缩 for(auto ivec = highValue.begin()+1;ivec!= highValue.end();ivec++) *ivec = *ivec*scale+lowMaxValue; ui->qcustomplot->graph(0)->addData(lowKey,lowValue); ui->qcustomplot->graph(0)->addData(highKey,highValue); ui->qcustomplot->yAxis->setOffset(-(ui->qcustomplot->width()/2-14)); ui->qcustomplot->replot(); /*****************************************************************************************************************/ QMessageBox::information(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("扫描完毕")); return true;}//void MainWindow::resizeEvent(QResizeEvent *event)//{// if(event->type() == QEvent::Resize)// {// ui->qcustomplot->yAxis->setOffset(-(ui->qcustomplot->width()/2-15));// ui->qcustomplot->replot();// }//}
阅读全文
0 0
- tmp
- tmp
- tmp
- tmp
- tmp
- tmp
- TMP
- tmp
- tmp
- tmp
- tmp
- Tmp
- tmp
- tmp
- tmp
- tmp
- tmp
- tmp
- 欢迎使用CSDN-markdown编辑器
- 分布式消息队列RocketMQ与Kafka架构上的巨大差异之1 -- 为什么RocketMQ要去除ZK依赖?
- 推送,从入门到放弃 笔记总结
- android mediaplay的使用中,stop和start的调用问题
- jQuery选择器
- tmp
- PAT1024~~~
- 17-7-17命运使然,来北京学java
- PAT1025~~~
- connect two WiFi simultaneously
- oracle-序列
- HTML+CSS编写静态网站-38 Vedio页面适配桌面布局
- Java 下载 Excel模板
- 访问其它用户下的对象