#include "ValueCheckDlg.h" #include "qstandarditemmodel.h" #include "qmessagebox.h" #include "qfontmetrics.h" #include #include #include "QSqlRecord" #pragma execution_character_set("utf-8") ValueCheckDlg::ValueCheckDlg(QWidget *parent) : QWidget(parent) { ui.setupUi(this); m_ViewImg = new lpImgViewer; connect(ui.m_pbCheck, SIGNAL(clicked()), this, SLOT(onCheckOutData())); connect(ui.Prev_checkShengchang, SIGNAL(clicked()), this, SLOT(onChenckButton())); connect(ui.Next_checkShengchang, SIGNAL(clicked()), this, SLOT(onChenckButton())); connect(ui.m_pbCount, SIGNAL(clicked()), this, SLOT(onChenckButton())); setWindowIcon(QIcon(":/leaper/app.png")); pShowName_label = ui.check_fileName; pShowName_label->clear(); check_showImg_label = ui.check_showImg_label; check_showImg_label->clear(); QGridLayout *pGrid = new QGridLayout(this); pGrid->addWidget(m_ViewImg); check_showImg_label->setLayout(pGrid); m_tableModel = new QStandardItemModel; tableView = ui.tableView; connect(tableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(onTBUI_ItemClick(const QModelIndex &))); tableView->setModel(m_tableModel); textBrowser = ui.textBrowser; pStartTimeEdit = ui.dateTimeEdit_start; pEndTimeEdit = ui.dateTimeEdit_end; QDateTime nDateTime = QDateTime::currentDateTime(); nDateTime.setTime(QTime(0, 0, 0)); pStartTimeEdit->setDateTime(nDateTime); pEndTimeEdit->setDateTime(QDateTime::currentDateTime()); setPageShow(0, 0); } ValueCheckDlg::~ValueCheckDlg() { if (m_tableModel) { delete m_tableModel; m_tableModel = NULL; } if (m_ViewImg) { delete m_ViewImg; m_ViewImg = NULL; } } void ValueCheckDlg::setDBPtr(class DetectDataDB *ptr) { m_db = ptr; } void ValueCheckDlg::initParam(QMap timetable, QStringList names) { ui.comboBox_Model->clear(); ui.comboBox_Model->addItem(tr("全部")); if (!names.contains("NG")) ui.comboBox_Model->addItem(tr("NG")); ui.comboBox_Model->addItems(names); } void ValueCheckDlg::createHeader() { QStringList listStr; listStr.append(QObject::tr("时间")); listStr.append(QObject::tr("型号")); listStr.append(QObject::tr("角度")); listStr.append(QObject::tr("分数")); listStr.append(QObject::tr("圆心")); listStr.append(QObject::tr("错误类型")); listStr.append(QObject::tr("执行时间")); listStr.append(QObject::tr("检测状态")); m_tableModel->setHorizontalHeaderLabels(listStr); } void ValueCheckDlg::updateModelShowLog(QSqlQuery &sql) { m_tableModel->clear(); m_strMap.clear(); createHeader(); tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); tableView->setSelectionBehavior(QAbstractItemView::SelectRows); tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应行宽 int nIndex = 0; while (sql.next()) { /*这里下面是统计查询到的通道对应的产品总数*/ QString time = sql.value("create_time").toString(); QString strModelName = sql.value("modeName").toString(); double dAngle = sql.value("angle").toDouble(); double dScore = sql.value("score").toDouble(); QString strCenter = sql.value("center").toString(); int errorType = sql.value("errorCode").toInt(); double runtime = sql.value("runtime").toDouble(); QString strFilename = sql.value("ImagePath").toString();//取出保存图片的路径名 QString runState = sql.value("runState").toString(); /* listStr.append(QObject::tr("时间")); listStr.append(QObject::tr("型号")); listStr.append(QObject::tr("角度")); listStr.append(QObject::tr("分数")); listStr.append(QObject::tr("圆心")); listStr.append(QObject::tr("错误类型")); listStr.append(QObject::tr("执行时间")); listStr.append(QObject::tr("检测状态")); */ m_tableModel->setItem(nIndex, 0, new QStandardItem(time)); m_tableModel->setItem(nIndex, 1, new QStandardItem(strModelName)); m_tableModel->setItem(nIndex, 2, new QStandardItem(QString("%1").arg(dAngle))); m_tableModel->setItem(nIndex, 3, new QStandardItem(QString("%1").arg(dScore))); m_tableModel->setItem(nIndex, 4, new QStandardItem(strCenter)); m_tableModel->setItem(nIndex, 5, new QStandardItem(QString("%1").arg(errorType))); m_tableModel->setItem(nIndex, 6, new QStandardItem(QString("%1").arg(runtime))); m_tableModel->setItem(nIndex, 7, new QStandardItem(runState)); m_strMap.insert(time, strFilename); pShowName_label->setText(strFilename); nIndex++; } ui.showNum_Label_Checkdata->setText(QString(QObject::tr("共显示%1条记录")).arg(nIndex)); tableView->setModel(m_tableModel); int page = nPrevNum / getLimitNumber(); int totalPage = nTotlaNumber / getLimitNumber(); setPageShow(page + 1, totalPage + 1); } int ValueCheckDlg::getLimitNumber() { int num = ui.LineNumber_checkShengchang->text().toInt(); if (num > 1) return num; else { ui.LineNumber_checkShengchang->setText("50"); return 50; } } int ValueCheckDlg::getTotalNumber() { QString startTime = pStartTimeEdit->dateTime().toString("yyyy-MM-dd hh:mm:ss zzz"); QString endTime = pEndTimeEdit->dateTime().toString("yyyy-MM-dd hh:mm:ss zzz"); QString modelName = ui.comboBox_Model->currentText(); QString strSql = QString(); if (modelName == QObject::tr("全部")) strSql = QString("select count(uid) from valueTable where create_time >'%1' and create_time <'%2' ").arg(startTime).arg(endTime); else strSql = QString("select count(uid) from valueTable where create_time >'%1' and create_time <'%2' and modeName == '%3'").arg(startTime).arg(endTime).arg(modelName); QSqlQuery sqlquery; m_db->checkoutData(strSql, sqlquery); int totalNumber = 0; while (sqlquery.next()) { QSqlRecord record = sqlquery.record(); QString fieldName = record.fieldName(0); QString num = sqlquery.value(0).toString(); totalNumber = num.toInt(); // /*这里下面是统计查询到的通道对应的产品总数*/ } return totalNumber; } Q_SLOT void ValueCheckDlg::onCheckOutData() { nTotlaNumber = 0; nPrevNum = 0; int limitNum = getLimitNumber(); nTotlaNumber = getTotalNumber(); onCheckOutData(limitNum, nPrevNum); } void ValueCheckDlg::onCheckOutData(int nLimitNum, int nPrenum) { QString startTime = pStartTimeEdit->dateTime().toString("yyyy-MM-dd hh:mm:ss zzz"); QString endTime = pEndTimeEdit->dateTime().toString("yyyy-MM-dd hh:mm:ss zzz"); QString modelName = ui.comboBox_Model->currentText(); QString strSql = QString(); if (modelName == QObject::tr("全部")) strSql = QString("select * from valueTable where create_time >'%1' and create_time <'%2' LIMIT %3 OFFSET %4 ").arg(startTime).arg(endTime).arg(nLimitNum).arg(nPrenum); else strSql = QString("select * from valueTable where create_time >'%1' and create_time <'%2' and modeName == '%3' LIMIT %4 OFFSET %5 ").arg(startTime).arg(endTime).arg(modelName).arg(nLimitNum).arg(nPrenum); QSqlQuery sqlquery; m_db->checkoutData(strSql, sqlquery); updateModelShowLog(sqlquery); } Q_SLOT void ValueCheckDlg::onChenckButton() { QString strObjName = sender()->objectName(); if (strObjName == "Next_checkShengchang") { if (nTotlaNumber <= 0) return; if (nPrevNum > nTotlaNumber) return; nPrevNum += getLimitNumber(); if (nPrevNum > nTotlaNumber) { nPrevNum -= getLimitNumber(); QMessageBox infobox(QMessageBox::Information, QObject::tr("提醒"), QObject::tr("已经是最后一页了"), QMessageBox::Ok, NULL); infobox.setWindowIcon(QIcon(":/leaper/app.png")); infobox.setButtonText(QMessageBox::Ok, QString(QObject::tr("确认"))); infobox.exec(); return; } onCheckOutData(getLimitNumber(), nPrevNum); } else if (strObjName == "Prev_checkShengchang") { if (nTotlaNumber <= 0) return; if (nPrevNum < 0) return; nPrevNum -= getLimitNumber(); if (nPrevNum < 0) { nPrevNum = 0; QMessageBox infobox(QMessageBox::Information, QObject::tr("提醒"), QObject::tr("已经是第一页了"), QMessageBox::Ok, NULL); infobox.setWindowIcon(QIcon(":/leaper/app.png")); infobox.setButtonText(QMessageBox::Ok, QString(QObject::tr("确认"))); infobox.exec(); return; } onCheckOutData(getLimitNumber(), nPrevNum); } else if (strObjName == "m_pbCount") { QString startTime = pStartTimeEdit->dateTime().toString("yyyy-MM-dd hh:mm:ss zzz"); QString endTime = pEndTimeEdit->dateTime().toString("yyyy-MM-dd hh:mm:ss zzz"); QString modelName = ui.comboBox_Model->currentText(); QString strSql = QString(); if (modelName == QObject::tr("全部")) strSql = QString("select errorCode,count(uid) from valueTable where create_time >'%1' and create_time <'%2' group by errorCode order by errorCode").arg(startTime).arg(endTime); else strSql = QString("select errorCode,count(uid) from valueTable where create_time >'%1' and create_time <'%2' and modeName == '%3' group by errorCode order by errorCode").arg(startTime).arg(endTime).arg(modelName); QSqlQuery sqlquery; m_db->checkoutData(strSql, sqlquery); QMap nCountMap; while (sqlquery.next()) { QSqlRecord record = sqlquery.record(); QString fieldName = record.fieldName(0); QString nType = sqlquery.value(0).toString(); int count = sqlquery.value(1).toInt(); nCountMap.insert(nType, count); } int TotalNumber = 0; int ErrorNumber = 0; textBrowser->clear(); for (QMap::iterator its = nCountMap.begin(); its != nCountMap.end(); ++its) { QString strKey = its.key(); int nValue = nCountMap.value(strKey); QString str; if (strKey != "0") str = QString("errorType:%1 Sum:%2;").arg(strKey).arg(nValue); else str = QString("goodType Sum:%2;").arg(nValue); TotalNumber += nValue; if (strKey != "0") { ErrorNumber += nValue; } textBrowser->append(str); } QString strEnd = QString("ErrorNumber:%1\nTotalNumber:%2").arg(ErrorNumber).arg(TotalNumber); textBrowser->append(strEnd); } } void ValueCheckDlg::setPageShow(int page, int totalPage) { QString str = QString(QObject::tr("第%1页 共%2页")).arg(page).arg(totalPage); ui.showPage_Label_Checkdata->setText(str); } void ValueCheckDlg::changeEvent(QEvent *event) { if (event->type() == QEvent::LanguageChange) { ui.retranslateUi(this); } } Q_SLOT void ValueCheckDlg::onTBUI_ItemClick(const QModelIndex & index) { QModelIndex nindex = m_tableModel->index(index.row(), 0); QString str = nindex.data().toString(); if (m_strMap.size() > 0) { QString strFileName = m_strMap.value(str); if (check_showImg_label) { QImage npixmap; QString appPath = QApplication::applicationDirPath(); npixmap.load(strFileName); m_ViewImg->setImg(npixmap); if (!npixmap.isNull()) { if (pShowName_label) { QFontMetrics fontMetrics(this->font()); int fontSize = fontMetrics.width(strFileName); QString str = strFileName; if (fontSize > pShowName_label->width()) { str = fontMetrics.elidedText(strFileName, Qt::ElideRight, pShowName_label->width()); } pShowName_label->setText(str); } } else { if (pShowName_label) { pShowName_label->setText(QObject::tr("无图片(或图片已过期/已被删除)")); } } } } } Q_SLOT void ValueCheckDlg::onSlowPixmap(QSqlQuery sql) { static bool nFlag = false; if (nFlag == true) return; nFlag = true; sql.next(); double dHight = sql.value("hight").toDouble(); QByteArray pic = sql.value("pic").toByteArray(); QImage img = QImage::fromData(pic); QSize s = img.size(); { int dhight = img.height(); int dwidth = img.width(); double nRate = img.width()*1.0 / img.height(); int scarew = 150; int scareh = 150 * 1.0 / nRate; if (scareh > 150) { scarew = 150; scareh = 150 * 1.0 / nRate; } if (check_showImg_label) { m_ViewImg->setImg(img); } } //label_6->setPixmap(m_Pix.scaled(WHEEL_PIC_SIZE, WHEEL_PIC_SIZE)); nFlag = false; }