#include "subform.h" #include #include #include #include #include "Qss.h" #include "libmodbus/modbus.h" #include #include #include #if defined(_MSC_VER) && (_MSC_VER >= 1600) # pragma execution_character_set("utf-8") #endif SubForm::SubForm(QString addr,int baurate,int device_addr) :ui(new Ui::Form) { ui->setupUi(this); init_charts(); QTimer *pTimer = new QTimer(this); QString *com = new QString(addr); qDebug()<<*com; mModel = new QStandardItemModel(this); mModel->setHorizontalHeaderLabels(QStringList() << "寄存器地址" << "返回值"<<"读取时间"<<"操作"); ui->tableView->setModel(mModel); ui->tableView->setSelectionMode(QAbstractItemView::ContiguousSelection); ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); mConfig = new Config; mConfig->addr = device_addr; mConfig->com = *com; mConfig->baurate = baurate; connect(pTimer,&QTimer::timeout,[=]() { static float sd = 0; if(gAsyncData == nullptr) return; CapData *z = new CapData; int ret = gAsyncData->TakeLast(device_addr,&z); if(ret == 0){ bool succ = z->succ; if(this->mLines.find(z->addr) != mLines.end()){ mLines[z->addr]->append(mLines.count() + 1,z->val1[0]); }else{ mLines[z->addr] = new QLineSeries; mChart->addSeries(mLines[z->addr]); // mLines[z->addr]->attachAxis(mAxisX); // mLines[z->addr]->attachAxis(mAxisY); } // mSeries1->append(sd,z->val1); pTime.append(QDateTime::currentDateTime().toString("yyyyMMdd-hh:mm:ss")); QStandardItem *found = nullptr; qDebug()<<"mModel->columnCount()"<columnCount() <rowCount(); int i = 0; int j = 0; for(;i < mModel->rowCount();i++){ for(;j < mModel->columnCount();j++){ if(mModel->item((i,j)) != nullptr){ qDebug()<item((i,j))->data(Qt::DisplayRole); if(mModel->item((i,j))->data(Qt::DisplayRole).toInt() == z->addr){ found = mModel->item((i,j)); break; } } } } if(found == 0){ QStandardItem *item; if(succ) item = new QStandardItem(QString("%1").arg(z->val1[0])); else item = new QStandardItem(QString("超时")); mModel->setItem(i, 1, item); QStandardItem *item1 = new QStandardItem(QString("%1").arg(z->addr)); mModel->setItem(i, 0, item1); mModel->setItem(i, 2, new QStandardItem(QString("%1").arg(z->time))); QPushButton *button = new QPushButton(this); ui->tableView->setIndexWidget(mModel->index(i,3),button); button->setText("绘图"); }else{ mModel->item(found->row(),0)->setData(QString("%1").arg(z->addr),Qt::DisplayRole); if(succ) mModel->item(found->row(),1)->setData(QString("%1").arg(z->val1[0]),Qt::DisplayRole); else mModel->item(found->row(),1)->setData(QString("超时"),Qt::DisplayRole); mModel->item(found->row(),2)->setData(QString("%1").arg(z->time),Qt::DisplayRole); } sd ++; if(sd > mMaxX){ mMaxX += 1024; mAxisX->setMax(mMaxX); } delete z; } }); pTimer->start(100); qDebug()<lineEdit_2->setText(addr); gAsyncData->AddConfig(this->mConfig); ui->tableView->setColumnWidth(2,230); } void SubForm::on_pushButton_clicked() { auto mGifFile = QFileDialog::getSaveFileName(this, "", QString("%1-%2.csv").arg(ui->lineEdit_2->text()) .arg(QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss"))); if(mGifFile != ""){ //.csv QFile file(mGifFile); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug()<<"Cannot open file for writing"; return; } QTextStream out(&file); // out << tr("x,") << tr("error,") << tr("speed,")<< tr("temperature,")<< tr("input volate,")<legend()->hide(); // mChart->addSeries(mSeries1); // mAxisX->setMin(0); //Y围 mAxisX->setMax(1024); mMaxX = 1024; mAxisX->setTickCount(17); mAxisX->setLabelFormat("%d"); mAxisX->setTitleText("point"); //X mAxisX->setLineVisible(true); mAxisX->setGridLinePen(QPen(Qt::white,0.1,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin)); mAxisX->setLinePen(QPen(Qt::yellow,1,Qt::SolidLine,Qt::FlatCap,Qt::RoundJoin)); mAxisX->setLabelsFont(QFont("",8,18,false)); mAxisX->setLabelsBrush(QBrush(QColor(Qt::white), Qt::SolidPattern)); mAxisX->setLabelsColor(QColor(Qt::white)); mAxisY->setMin(-10); //Y围 mAxisY->setMax(100); mAxisY->setTickCount(11); mAxisY->setLabelFormat("%d"); mAxisY->setLinePenColor(QColor(Qt::yellow)); // mAxisY->setGridLineColor(QColor(Qt::yellow)); mAxisY->setGridLinePen(QPen(Qt::white,0.1,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin)); mAxisY->setGridLineVisible(true); mAxisY->setLinePen(QPen(Qt::yellow,1,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin)); mAxisY->setLabelsFont(QFont("",8,18,false)); mAxisY->setLabelsBrush(QBrush(QColor(Qt::white), Qt::SolidPattern)); mAxisY->setLabelsColor(QColor(Qt::white)); mAxisY->setTitleFont(QFont("",13,20,false)); mAxisY->setTitleBrush(QBrush(QColor(Qt::white), Qt::SolidPattern)); mAxisY->setTitleText("temperature (掳C)"); mChart->addAxis(mAxisX,Qt::AlignBottom); //位mChart械位 mChart->addAxis(mAxisY,Qt::AlignLeft); mChart->addAxis(mAxisY2,Qt::AlignRight); mChart->setBackgroundVisible(false); mSeries1->attachAxis(mAxisX); // mSeries1->attachAxis(mAxisY); //mChart mChart->setMargins(QMargins(0,0,0,0)); ui->graphicsView->setChart(mChart); ui->graphicsView->setRenderHint(QPainter::TextAntialiasing); // ui->graphicsView->setBackgroundBrush(QBrush(QColor(Qt::black),Qt::SolidPattern)); ui->graphicsView->scene()->setBackgroundBrush(QBrush(QColor(Qt::black),Qt::SolidPattern)); ui->graphicsView->setRubberBand(QChartView::VerticalRubberBand); mChart->legend()->setAlignment(Qt::AlignBottom);// mChart->legend()->setContentsMargins(10,10,10,10);//left,top,right,bottom mChart->legend()->setVisible(true);// QFont font = mChart->legend()->font(); font.setItalic(!font.italic()); mChart->legend()->setFont(font);//斜 font.setPointSizeF(12); mChart->legend()->setFont(font);//小 mChart->legend()->setFont(QFont(""));// mChart->legend()->setLabelColor(Qt::white); // } void SubForm::on_pushButton_2_clicked(bool checked) { } void SubForm::on_pushButton_2_clicked() { for(int i = 0;i < mConfig->req.length();i++){ if(ui->lineEdit->text().toInt() == mConfig->req[i].addr){ return; } } mConfig->req.append(Req{ ui->lineEdit->text().toUShort(), ui->lineEdit_3->text().toUShort(), }); }