#include "qcheckdatadlg.h" #include "qstandarditemmodel.h" #include "qmessagebox.h" #include "qfontmetrics.h" #pragma execution_character_set("utf-8") QCheckDataDlg::QCheckDataDlg(QWidget *parent) : QDialog(parent), m_db(NULL), nPrevNum(0), nTotlaNumber(0) { ui.setupUi(this); m_ViewImg = new QTpGraphView; 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()); Qt::WindowFlags flags = Qt::Dialog; flags |= Qt::WindowMinMaxButtonsHint; flags |= Qt::WindowCloseButtonHint; setWindowFlags(flags); setPageShow(0, 0); } QCheckDataDlg::~QCheckDataDlg() { if (m_tableModel) { delete m_tableModel; m_tableModel = NULL; } if (m_ViewImg){ delete m_ViewImg; m_ViewImg = NULL; } } void QCheckDataDlg::createHeader() { QStringList listStr; listStr.append(QObject::tr("时间")); listStr.append(QObject::tr("型号")); listStr.append(QObject::tr("matchScore")); listStr.append(QObject::tr("BenchMark")); listStr.append(QObject::tr("Angle")); listStr.append(QObject::tr("errorType")); listStr.append(QObject::tr("resultTip")); listStr.append(QObject::tr("工位")); m_tableModel->setHorizontalHeaderLabels(listStr); } void QCheckDataDlg::updateModelShowLog(QSqlQuery &sql) { m_tableModel->clear(); m_strMap.clear(); createHeader(); tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); tableView->setSelectionBehavior(QAbstractItemView::SelectRows); tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应行宽 int nIndex = 0; while (sql.next()) { /*这里下面是统计查询到的通道对应的产品总数*/ QString time = sql.value("time").toString(); QString dAngle = sql.value("dAngle").toString(); QString matchScore = sql.value("matchScore").toString().left(5); QString errorType = sql.value("errorType").toString(); QString resultTip = sql.value("resultTip").toString(); QString threshBenchMark = sql.value("threshBenchMark").toString(); QString stationName = sql.value("stationName").toString(); QString strFilename = sql.value("value1").toString();//取出保存图片的路径名 //QByteArray picByte = sql.value("image").toByteArray(); QString strModelName = sql.value("value2").toString(); //QImage img = QImage::fromData(picByte); m_tableModel->setItem(nIndex, 0, new QStandardItem(time)); m_tableModel->setItem(nIndex, 1, new QStandardItem(strModelName)); m_tableModel->setItem(nIndex, 2, new QStandardItem(matchScore)); m_tableModel->setItem(nIndex, 3, new QStandardItem(threshBenchMark)); m_tableModel->setItem(nIndex, 4, new QStandardItem(dAngle)); m_tableModel->setItem(nIndex, 5, new QStandardItem(errorType)); m_tableModel->setItem(nIndex, 6, new QStandardItem(resultTip)); m_tableModel->setItem(nIndex, 7, new QStandardItem(stationName)); 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 QCheckDataDlg::getLimitNumber() { int num = ui.LineNumber_checkShengchang->text().toInt(); if (num > 1) return num; else { ui.LineNumber_checkShengchang->setText("50"); return 50; } } int QCheckDataDlg::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 stationName = getStationName(); int errorType = getErrorType(); QString strSql = QString(); if (stationName == QObject::tr("全部")&&errorType == 0) strSql = QString("select count(uid) from RltTable where time >'%1' and time <'%2' ").arg(startTime).arg(endTime); else if (stationName == QObject::tr("全部") && errorType == 1) strSql = QString("select count(uid) from RltTable where time >'%1' and time <'%2' and errorType != '%3'").arg(startTime).arg(endTime).arg(0); else if (stationName != QObject::tr("全部") && errorType == 1) strSql = QString("select count(uid) from RltTable where time >'%1' and time <'%2' and errorType != '%3' and stationName == '%4' ").arg(startTime).arg(endTime).arg(0).arg(stationName); else strSql = QString("select count(uid) from RltTable where time >'%1' and time <'%2' and stationName == '%3'").arg(startTime).arg(endTime).arg(stationName); 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 QCheckDataDlg::onCheckOutData() { nTotlaNumber = 0; nPrevNum = 0; int limitNum = getLimitNumber(); nTotlaNumber = getTotalNumber(); onCheckOutData(limitNum, nPrevNum); } void QCheckDataDlg::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 stationName = getStationName(); int errorType = getErrorType(); QString strSql = QString(); if (stationName == QObject::tr("全部")&&errorType == 0) strSql=QString("select * from RltTable where time >'%1' and time <'%2' LIMIT %3 OFFSET %4 ").arg(startTime).arg(endTime).arg(nLimitNum).arg(nPrenum); else if (stationName == QObject::tr("全部") && errorType == 1) strSql = QString("select * from RltTable where time >'%1' and time <'%2' and errorType != '%3' LIMIT %4 OFFSET %5 ").arg(startTime).arg(endTime).arg(0).arg(nLimitNum).arg(nPrenum); else if (stationName != QObject::tr("全部") && errorType == 1) strSql = QString("select * from RltTable where time >'%1' and time <'%2' and errorType != '%3' and stationName == '%4' LIMIT %5 OFFSET %6 ").arg(startTime).arg(endTime).arg(0).arg(stationName).arg(nLimitNum).arg(nPrenum); else strSql = QString("select * from RltTable where time >'%1' and time <'%2' and stationName == '%3' LIMIT %4 OFFSET %5 ").arg(startTime).arg(endTime).arg(stationName).arg(nLimitNum).arg(nPrenum); QSqlQuery sqlquery; m_db->checkoutData(strSql, sqlquery); updateModelShowLog(sqlquery); } Q_SLOT void QCheckDataDlg::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 stationName = getStationName(); QString strSql = QString(); if (stationName == QObject::tr("全部")) strSql = QString("select errorType,count(uid) from RltTable where time >'%1' and time <'%2' group by errorType order by errorType").arg(startTime).arg(endTime); else strSql = QString("select errorType,count(uid) from RltTable where time >'%1' and time <'%2' and stationName == '%3' group by errorType order by errorType").arg(startTime).arg(endTime).arg(stationName); 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 QCheckDataDlg::setStationNames(QStringList listNames) { ui.comboBox_station->addItems(listNames); } QString QCheckDataDlg::getStationName() { return ui.comboBox_station->currentText(); } int QCheckDataDlg::getErrorType() { QString str = ui.comboBox_errorType->currentText(); if (str == QObject::tr("全部")) return 0; else return 1; } void QCheckDataDlg::setPageShow(int page,int totalPage) { QString str = QString(QObject::tr("第%1页 共%2页")).arg(page).arg(totalPage); ui.showPage_Label_Checkdata->setText(str); } Q_SLOT void QCheckDataDlg::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) { QPixmap npixmap; QString appPath = QApplication::applicationDirPath(); npixmap.load(appPath+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("无图片(或图片已过期/已被删除)")); } } } } int i = 0; } Q_SLOT void QCheckDataDlg::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(); QPixmap m_Pix = QPixmap::fromImage(img); { int dhight = m_Pix.height(); int dwidth = m_Pix.width(); double nRate = m_Pix.width()*1.0 / m_Pix.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(m_Pix); } } //label_6->setPixmap(m_Pix.scaled(WHEEL_PIC_SIZE, WHEEL_PIC_SIZE)); nFlag = false; }