/* * * *2013-9-15高压报警停止充电 */ /* QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("是否初始化产品计数?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ updateTotalCnt(0); sysPara->devOp->clearProductCnt(1); sysPara->saveParaToFile(); } */ #include "mainwindow.h" #include "ui_mainwindow.h" #include "InputMethod.h" #include #include #include #include #include #include #include #include #include #ifndef Q_OS_WIN #include #else #define reboot(a,...) (0 == 0) #endif #include #include #include #include #include #include #include #include #include #include #include "DevOp.h" #include "Public.h" #include "LogInfo.h" #include "QBarCode.h" #include "scene/picscene.h" #include #include "MyInputMethod.h" #include #include "VerBVersion.h" //#define SAVEWHENPREVIEW // 预览时先保存 #include #include #include #define MDTFLAG 0xff00FF10 #define QRFLAG 0xff00FF20 #define BARFLAG 0xff00FF30 // 统一使用相同的掩码和比较值 #define COLOR_MASK 0x00FFFFF0 // 忽略 Alpha 通道 // 定义比较用的 RGB 值 #define MDT_RGB 0x00FF10 #define QR_RGB 0x00FF20 #define BAR_RGB 0x00FF30 #define MMVAR 1 #define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障 #define EXPIRY_VARI_RECONISE 0x0000FF #define RECICLARNUMBER 22 int firstGetFpgaVersionNumFlag=0; static int weekendPowerOff = 0; unsigned char test_flag,open_close; extern QFile PrintDatafile; extern MyInputMethod *myInputMethod; MainWindow::MainWindow(QWidget *parent) : QWidget(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //不使用布局 //ui->textEdit->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }"); QFont font = ui->textEdit->font(); font.setPixelSize(12); ui->textEdit->setFont(font); previewFlag =0; ui->textEditOption->bindText(ui->textEdit); ui->textEditOption->bindPicWidget(ui->PicWidgetDisp); ui->textEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); //ui->textEditOption->setl #ifdef _2DCODE_ // dlgqrcode = new dlgQrCode(); dlgqrcode = ui->textEditOption->qrcode; // 实时更新二维码,使用同一个界面 //barcode = ui->textEditOption->barcode; barcode = new QBarCode(); #endif //ui->pushButtonEditBarCode->hide(); connect(ui->labelFaultResume,SIGNAL(pressed()),this,SLOT(onLabelFaultRusumePressed())); #ifdef EnableArabic connect(ui->textEditOption,SIGNAL(fontSizeArabicSelect(bool)),myInputMethod,SLOT(getArabicFlag(bool))); connect(myInputMethod,SIGNAL(selectArabicPage(int)),ui->textEditOption,SLOT(changeArabicPage(int))); connect(myInputMethod,SIGNAL(switchEnglishOrArabic(bool)),ui->textEditOption,SLOT(swithchEnglisOrArabic(bool))); connect(ui->textEditOption,SIGNAL(EnableSwitchArabicFlag(bool)),myInputMethod,SLOT(switchArabicFlag(bool))); #endif connect(ui->labelStatusHighVoltageFault,SIGNAL(pressed()),this,SLOT(onStatusHighVoltageFault())); connect(ui->labelStatusInkLeak,SIGNAL(pressed()),this,SLOT(onStatusInkLeak())); connect(ui->labelStatusInkSwint,SIGNAL(pressed()),this,SLOT(onStatusInkSwint())); connect(ui->labelStatusInkWaterLevel,SIGNAL(pressed()),this,SLOT(onStatusInkWaterLevel())); connect(ui->labelStatusRecycleWarn,SIGNAL(pressed()),this,SLOT(onStatusRecycleWarn())); connect(ui->labelStatusSolvLevelWarn,SIGNAL(pressed()),this,SLOT(onStatusSolvLevelWarn())); connect(ui->labelStatusViscosityWarn,SIGNAL(pressed()),this,SLOT(onStatusViscosityWarn())); connect(ui->labelStatusChargefault,SIGNAL(pressed()),this,SLOT(onStatusChargefault())); //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); labelStatusChargefault //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); connect(ui->textEdit,SIGNAL(textChanged ()),this,SLOT(ontextEdittextChanged())); connect(ui->textEdit,SIGNAL(cursorPositionChanged()),this,SLOT(onTextEditCursorPositionChanged())); connect(ui->textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)), ui->textEditOption, SLOT(currentCharFormatChanged(QTextCharFormat))); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(displayTime())); timer->start(1000); airPushTimer = new QTimer(this); connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess())); timerShowItem = new QTimer(this); connect(timerShowItem, SIGNAL(timeout()), this, SLOT(onShowAndHideItem())); timerPowerOff = new QTimer(this); connect(timerPowerOff,SIGNAL(timeout()),this,SLOT(sendPowerOffCmd())); printingFlag = false; startPrintingFlag = false; connect(ui->labelProductCnt,SIGNAL(pressed()),this,SLOT(onLabelProductCntPressed())); connect(ui->labelTotalProductCnt,SIGNAL(pressed()),this,SLOT(onLabelTotalProductCntPressed())); connect(ui->textEditOption->getPushButtonPreview(),SIGNAL(pressed()),this,SLOT(onPushButtonPreviewPressed())); #ifndef EnableArabic connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); #else connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(setOpenFileName(QString))); #endif connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); //edit@02-07 connect(ui->textEditOption,SIGNAL(switchBengalLanguage(bool)),myInputMethod,SLOT(switchBangalInput(bool))); connect(ui->textEditOption,SIGNAL(PicfileNameOpen(QString,bool)),this,SLOT(openPicFIleOpen(QString,bool))); // 由TEXTOPTION界面按键触发 connect(ui->pushButtonTXTOpen,SIGNAL(clicked()),ui->textEditOption,SLOT( showDlg())); connect(ui->pushButtonCNTResetNow,SIGNAL(pressed()),this,SLOT(onPushButtonCNTResetNowPressed())); #ifdef _2DCODE_ connect(ui->pushButtonEditBarCode,SIGNAL(pressed()),this,SLOT(onEditBarCode())); connect(ui->pushButtonQREnCode,SIGNAL(pressed()),this,SLOT(onEditQRCode())); connect(ui->textEditOption, SIGNAL(fontSizeChange(int)), barcode, SLOT(setFontSize(int))); connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); connect(dlgqrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); //专门处理网络发送的二维码 connect(dlgqrcode,SIGNAL(sig_updateNetworkQR()),this,SLOT(slt_updateNetworkQR())); connect(dlgqrcode, SIGNAL(sig_clearAllQRCode()), this, SLOT(slt_clearAllQRCode())); #endif connect(this,SIGNAL(ShowWarnningText(QString,QString)),this,SLOT(ShowWarnningText1(QString,QString))); msgtest = new QMessageBox(this); connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); //QFile file(SYS_ROOT_DIR"UseEn"); if( Public::ReadLanguageName()!="Chinese") { ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); //ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); if(Public::ReadLanguageName()=="Thai"){ ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint3.png")); ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint3.png")); } } // 立即清零 #ifdef ENGLISH ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); #endif #ifndef CLEARCNTNOW ui->pushButtonCNTResetNow->hide(); #endif fileChange=true; pushButtonFlag = true; if(sysPara) { sysPara->status.FileChangeRestCntFlag=0; } Public::derivePixelSizeFromHeight(12); pPicScene = new PicScene(this); //edit@12-09 pPicScene->setSceneRect(QRectF(0,0, 3999, 220)); ui->graphicsView->setScene(pPicScene); ui->graphicsView->centerOn(0,0); ui->senceEditOption->bindScene(pPicScene, ui->graphicsView, ui->textEdit); ui->senceEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); connect(ui->senceEditOption,SIGNAL(generateQRCode(QString)),this,SLOT(onGenerateQRCode(QString))); connect(ui->senceEditOption,SIGNAL(previewScene()),this,SLOT(onPreviewScene())); connect(ui->textEditOption,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); connect(this,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); connect(ui->senceEditOption,SIGNAL(editItemMode()),ui->textEditOption,SLOT(onEditItemMode())); connect(ui->textEditOption,SIGNAL(editItemDone()),ui->senceEditOption,SLOT(onEditItemDone())); connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); m_2sFlag = false; moveToThread(&ShowThead); ShowThead.start(); ui->pushButtonStart->setHidden(true);//屏蔽紧急停机按钮 ui->textEdit->viewport()->setProperty("cursor", QVariant(QCursor(Qt::IBeamCursor))); // 在 textChanged 信号中处理 connect(ui->textEdit, &QTextEdit::textChanged, [=]() { QTextCursor c = ui->textEdit->textCursor(); QRect r = ui->textEdit->cursorRect(c); int viewportWidth = ui->textEdit->viewport()->width(); if (r.right() > viewportWidth - 20) { int diff = r.right() - viewportWidth + 20; ui->textEdit->horizontalScrollBar()->setValue( ui->textEdit->horizontalScrollBar()->value() + diff ); } }); } MainWindow::~MainWindow() { disconnect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem())); if (ShowThead.isRunning()) { ShowThead.quit(); ShowThead.wait(); } delete ui; delete timer; delete pPicScene; } /*显示当前系统时间 */ void MainWindow::displayTime() { if(sysPara){ ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.AD_FIXED/4)+"°C"); // 机箱温度 ui->labDate->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); static bool CleanUPEn=1,preCleanUP=0; if(!sysPara->para.isCheckMagnet) { CleanUPEn = (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT); } else { CleanUPEn = (sysPara->status.currReclaimTankPos<70) ; } if(CleanUPEn != preCleanUP){ ui->pushButtonCleanUP->setEnabled(CleanUPEn); } preCleanUP=CleanUPEn; if(m_2sFlag) { { sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); //控制供墨阀开关 sysPara->devOp->controlInkValvePWM(!sysPara->devOp->isInkValveOpen1()); //控制供墨阀开关 } } } } void MainWindow::bindSysPara(SysPara *sysPara){ this->sysPara = sysPara; ui->textEditOption->bindSysPara(sysPara); ui->widgetPrintTextDisplay->bindSysPara(sysPara); #ifdef _2DCODE_ barcode->bindSysPara(sysPara); dlgqrcode->setSysPara(sysPara); dlgqrcode->barCodeFlag = this->sysPara->para.qrOption.barCodeFlag; dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); #endif #ifdef PICSCENE ui->senceEditOption->bindSysPara(sysPara); #endif } void MainWindow::updateSysParaToUI(){ if(sysPara){ //nothing here ui->textEditOption->updateSysParaToUI(); } } void MainWindow::applyUIPara(){ if(sysPara){ } } void MainWindow::CheckStatus(int Flag){ if(sysPara){ static unsigned int lastProductCnt=0; int AutoCount=0; int bcAutoCount=0; static int lastMinutes = 0; //QDate curDate=QDate::currentDate(); int currMinutes = QDateTime::currentDateTime().time().minute(); int usbDate = sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum ||sysPara->status.classVariNum; if(usbDate) { //qDebug()<<"CheckStatus"; bool needSendPrintData=false; //if(sysPara->print.CurDateVar.endRowPos && (sysPara->print.CurDateVar.day != curDate.day())) if (sysPara->status.ExpiryVarNum && (lastMinutes != currMinutes)) { ExpiryDotUpdate(1); needSendPrintData = true; } //if(sysPara->print.ExpiryVar.endRowPos && (sysPara->para.ExpiryDay != r_ExpiryDay)) if(sysPara->status.CurrDateVariNum && (lastMinutes != currMinutes)) { ExpiryDotUpdate(2); needSendPrintData = true; } if(sysPara->status.classVariNum && (lastMinutes != currMinutes)) { ExpiryDotUpdate(3); needSendPrintData = true; } lastMinutes = currMinutes; //sysPara->print.CurDateVar.day = curDate.day(); if(needSendPrintData) { sysPara->status.ExpiryDispUpdate=10; SendPrintDataToFpga(0); } //if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) // ui->widgetPrintTextDisplay->update(); //sysPara->status.ExpiryDispUpdate=1; } if(sysPara->status.productCnt != lastProductCnt) //if( sysPara->para.calandar_and_dat.cnt1CurrValue != sysPara->para.qrOption.counter ) { lastProductCnt = sysPara->status.productCnt; //sysPara->para.qrOption.counter ++;//= sysPara->para.calandar_and_dat.cnt1CurrValue; // 荆州-四机赛瓦要求:跟计数器同步 此处优化逻辑,增量大于0才+= if (sysPara->para.qrOption.CntInc > 0) sysPara->para.qrOption.counter += sysPara->para.qrOption.CntInc; AutoCount = (sysPara->status.QRvariNum?1:0); //bcAutoCount = (sysPara->status.BCvariNum?1:0); #ifdef MYARMTEST qDebug()<<"CheckStatus:"<para.qrOption.counter<status.productCnt<para.qrOption.counter <status.QRvariNum; } //else qDebug()<<"P:"<status.productCnt; if( sysPara->para.qrOption.RecFromHost || AutoCount ) { sysPara->para.qrOption.RecFromHost=0; sysPara->para.qrOption.type = sysPara->print.QRvars[0].type; sysPara->para.qrOption.height = sysPara->print.QRvars[0].height; sysPara->para.qrOption.width = sysPara->print.QRvars[0].width; if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) { onUpdateDispQRCode(1); // 更新二维码显示 //qDebug()<<"PN:"<status.LightUpCnt ++ ; if((sysPara->status.LightUpCnt%3) == 0){ if(printingFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag) sysPara->status.GreenLightOnFlag = true; else sysPara->status.GreenLightOnFlag = false; if(sysPara->status.GreenLightOnFlag){ if(!sysPara->para.isCheckPrintLight) sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable()); else sysPara->devOp->controlGreenLight(true); } else{ sysPara->devOp->controlGreenLight(false); // 只在确定不亮时才发关灯 } } Test_Start_Stop(); if(sysPara->status.circleProductCnt && (sysPara->status.productCnt >= sysPara->para.cnt1EndValue)) { if(sysPara) { sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA sysPara->para.totalProductCnt = 0; } } } } } void MainWindow::RefreshStatusLight(){//100ms if(sysPara){ static int hdint = 0; static int reclainTankReachEnd = 0; if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关 if (sysPara->status.reclainTankReachEnd) { sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); } } hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT); if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底 if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态 sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); } } reclainTankReachEnd = sysPara->status.reclainTankReachEnd; if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){ if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关 ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); } else { ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); } if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){//喷头盖 ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); if(printingFlag && startPrintingFlag) setRunStatus(tr("正在喷印...............")); } else { ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); if(printingFlag && startPrintingFlag) setRunStatus(tr("喷头盖开, 喷印无法正常进行!!!")); } if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告 ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); } else { ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); strTitle = tr("墨水缸满报警"); if(sysPara->devOp->isMixValveOpen()) { sysPara->devOp->controlMixValve(false); //关掉混合阀 } } if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){ ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); } else { ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); strTitle = tr("墨水液位报警"); } if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){ ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); } else { ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); strTitle = tr("溶剂液位报警"); } if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){ ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); } else { ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); } //static int HVfaultCnt=0; if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){ if(!sysPara->status.lastHighVoltageFault) { flagOfClearHighVltageWarnning = false; ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); } // HVfaultCnt=0; //sysPara->status.HVFaultCloseEn=0; } else { ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); if(startPrintingFlag && printingFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电 on_pushButtonPausePrint_pressed(); LogInfo::setRunStatusText(tr("高压故障,暂停打印")); setRunStatus(tr("高压故障,暂停打印")); strTitle = tr("高压故障,暂停打印."); sysPara->status.lastHighVoltageFault = true; } if((sysPara->status.currReclaimTankPos != 0) && sysPara->para.HVFaultCloseEn ) { //HVfaultCnt++; // 高压故障关回收槽 if(sysPara->status.HVFaultCloseEn==0){ sysPara->status.reclaimTankBlockedAppending=0; sysPara->status.reclaimCloseCnt=100; on_pushButtonReclaimTankClose_pressed(); sysPara->status.reclaimTankBlockedAppending=1; LogInfo::setRunStatusText(tr("高压故障,关回收槽")); setRunStatus(tr("高压故障,关回收槽和墨线")); } sysPara->status.HVFaultCloseEn=1; } } } /*-----------------------------------------------------------------------------------*/ sysPara->status.lastStatWarn = sysPara->status.statWarn; if(sysPara->status.lastViscosityFault != sysPara->status.viscosityFault){ if(sysPara->status.viscosityFault==0){ ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); } else { if(sysPara->status.viscosityFault==1){ ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); } else if(sysPara->status.viscosityFault==2) { ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); } } } sysPara->status.lastViscosityFault = sysPara->status.viscosityFault; /*-----------------------------------------------------------------------------------*/ if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie if(sysPara->status.RecycleWarnCnt) ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); sysPara->status.RecycleWarnCnt = 0; sysPara->status.lastRecycleWarn = 0; } else { // 速度过快时墨线可能瞬时偏移导致误报回收故障,此时抑制计数器累加并重置,避免误触发关槽 if(sysPara->status.lesslen_warn && (sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME)) { sysPara->status.RecycleWarnCnt = 0; ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); } else if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone) { if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY) { sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); sysPara->status.reclaimCloseCnt=100; if(sysPara->para.RecycleWarnAction) { if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){ on_pushButtonStopPrint_pressed(); on_pushButtonReclaimTankClose_pressed(); LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线")); setRunStatus(tr("回收故障,关闭回收槽,关墨线")); } } else setRunStatus(tr("回收故障.")); } else { sysPara->status.RecycleWarnCnt ++ ; ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); if(sysPara->status.RecycleWarnCnt%10==9) LogInfo::setRunStatusText(tr("回收异常,墨线可能偏离.(%1)").arg(sysPara->status.RecycleWarnCnt)); } } else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--; } if(ui->labelRunStatus->text().length()<4){ if(startPrintingFlag ){ if(printingFlag) setRunStatus(tr("正在喷印...............")); else setRunStatus(tr("暂停喷印...............")); } } // 20160620 新增主界面显示:压力,粘度,隔膜位置,晶振电压数,相位 ui->labPress->setText(QString("%1/%2").arg(sysPara->status.PRESSURE).arg(sysPara->para.pressure)); ui->labViso->setText(QString("%1/%2").arg(sysPara->status.viscosity).arg(sysPara->para.viscosity) ); if(sysPara->para.gearPumpEnable) { ui->labPosition->setText(QString("%1").arg(sysPara->status.gearPumpRunSpeed)); } else { ui->labPosition->setText(QString("%1/%2").arg(sysPara->status.SEPTAL_POSITION).arg(sysPara->para.septalPostion) ); } ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); } } bool MainWindow::updatePhaseIndicatorLight(){ if(sysPara==0) return 0; if(dlgMyWarringShowDlyCnt)dlgMyWarringShowDlyCnt--; if(dlgMyWarringShowDlyCnt==1) dlgMyWarring.hide(); /*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/ if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || (sysPara->status.statWarn & WARN_STATUS_HDINT) || !sysPara->status.reclainTankReachEnd){ //故障后必须等手动按故障恢复才会继续 if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){ if(sysPara->status.lastPhaseFault){ sysPara->status.lastPhaseFault = 0; ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); } } sysPara->status.phaseErrorCnt = 0; } else { if(sysPara->status.phaseErrorCnt < 10) sysPara->status.phaseErrorCnt ++ ; else { if(!sysPara->status.lastPhaseFault){ ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); sysPara->status.lastPhaseFault = 1; if(sysPara->status.flight_tm_error) { LogInfo::setRunStatusText(tr("相位故障:飞行时间错误!")); } if(sysPara->status.detect_phase_error) { LogInfo::setRunStatusText(tr("相位故障:相位检测错误!")); } } if(sysPara->para.powerOffAfterPhaseFault ){ if(!sysPara->status.powerOffAfterPhaseFaultAppending){ sysPara->status.powerOffAfterPhaseFaultAppending = 1; _on_pushButtonPowerOff_pressed(false); LogInfo::setRunStatusText(tr("相位故障,准备关机")); setRunStatus(tr("相位故障,准备关机")); strTitle = tr("相位故障,准备关机"); } } else if(sysPara->para.suspendAfterPhaseFault){ if(sysPara->para.stopCounterMeterAfterFault){ if(startPrintingFlag && printingFlag){ //已经在打印,则暂停打印 on_pushButtonPausePrint_pressed(); LogInfo::setRunStatusText(tr("相位故障,暂停打印")); setRunStatus(tr("相位故障,暂停打印")); strTitle = tr("相位故障,暂停打印"); } } else if(!sysPara->status.DACDisable){ sysPara->devOp->printCtrl(PRINT_CTRL_DAC_DISABLE); sysPara->status.DACDisable = true; LogInfo::setRunStatusText(tr("相位故障,屏蔽DAC输出")); setRunStatus(tr("相位故障,屏蔽充电")); strTitle = tr("相位故障,屏蔽充电"); } } } } return sysPara->status.lastPhaseFault; } double MainWindow::getMaxSpeedCalcPara(){ sysPara->para.printRowDelay = sysPara->para.currPrintMode; if(sysPara->status.isPrinting == false) sysPara->status.pixNumPerCol = sysPara->status.currPrintRow; // else // sysPara->status.currPrintRow = sysPara->status.pixNumPerCol; sysPara->para.pixNumPerCol = sysPara->status.pixNumPerCol; sysPara->para.reducedPixelNum = sysPara->para.reducedPixelNumRatio*sysPara->para.pixNumPerCol/100; int dotNumPerCol = (sysPara->para.pixNumPerCol- sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.printRowDelay + 1) + (sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.lineEndAdjustPointDelay + 1); dotNumPerCol = sysPara->para.pixNumPerCol? ((dotNumPerCol*(sysPara->para.pixNumPerCol - sysPara->para.reducedPixelNum))/sysPara->para.pixNumPerCol):1; // sysPara->para.dotNumPerCol += sysPara->para.printColDelay; dotNumPerCol =( sysPara->para.alterPrint.enable)? dotNumPerCol/2:dotNumPerCol; int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) int colNum = dotNumPerCol?dotNum/dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 double pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 if(sysPara->para.divideRatio == 0 || sysPara->para.synPulseNumPerMm == 0) return 600.0f; double freq = (FPGA_SYS_HZ/(sysPara->para.divideRatio*2)); double ddotNumPerCol = sysPara->status.currPrintRow - (sysPara->status.currPrintRow * sysPara->para.reducedPixelNumRatio / 100.0); pulseNum = sysPara->para.printColDelay / sysPara->para.synPulseNumPerMm / 1000.0 * freq / ddotNumPerCol * 60.0; return qBound(0.0, pulseNum, 600.0); } static int reclaimTankDelay = 0; void MainWindow::updateSysStatusToUI(){ //100ms if(sysPara){ if(sysPara->para.gearPumpEnable) { ui->label_11->setText(tr("齿轮泵转速")); } else { ui->label_11->setText(tr("隔膜位置")); } RefreshStatusLight(); if(sysPara->status.lastProductCnt != sysPara->status.productCnt){ //产品计数 ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); updateTotalCnt(0); } if(sysPara->status.ExpiryDispUpdate >0 ) { sysPara->status.ExpiryDispUpdate--; ui->widgetPrintTextDisplay->update();// 2018.5.25 } if(sysPara->para.alterPrint.enable==1) ui->labelXFileName->setText (tr("交替打印")); else if(sysPara->para.alterPrint.enable==2) ui->labelXFileName->setText (tr("电眼交替")); else ui->labelXFileName->setText (""); /*--------------------------------------------------------------------------*/ //if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && printintFlag){ //同步器速度 if(( (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) ||(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) ||(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) )&& sysPara->para.eleEyeTriggerSynPrintEn) ) )//&&printintFlag { if(sysPara->para.synPulseNumPerMm) { unsigned int tmp = ((unsigned int) sysPara->status.synPulseCntPer1s ) & 0xffffff; unsigned int mm = tmp /sysPara->para.synPulseNumPerMm * 60; // 1min总脉冲/毫米脉冲数 = 1min走过的距离mm数 int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) int colNum = sysPara->para.dotNumPerCol?dotNum/sysPara->para.dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 int maxMM = 0; if(!sysPara->para.charWidthSetEnable) { if( (sysPara->status.currPrintRow != 0) && (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) /*&& (sysPara->para.currPrintMode == FAST_PRINT || sysPara->para.currPrintMode == STANDARD_PRINT) */){ maxMM = calculateMaxSpeed(pulseNum); maxMM = maxMM *60; if(sysPara->para.alterPrint.enable) { maxMM = maxMM * 2; } } else { maxMM = (pulseNum/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距 // qDebug()<< "[Info] OLD COUNT mm" << maxMM; } } else { double speed = getMaxSpeedCalcPara();//No67 maxMM = int(speed * 1000.0); } ui->labelSynRate->setText(tr("%1.%2[%3.%4]米/分").arg(mm/1000).arg(mm%1000,3,10,QLatin1Char('0')) .arg(maxMM/1000).arg(maxMM%1000,3,10,QLatin1Char('0'))); } else ui->labelSynRate->setText(""); sysPara->status.lastSynPulseCntPer1s = sysPara->status.synPulseCntPer1s; } else ui->labelSynRate->setText(""); /*--------------------------------------------------------------------------*/ if(sysPara->status.lastSynColDelay != sysPara->status.synColDelay){ // if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) && sysPara->para.eleEyeTriggerSynPrintEn)) ui->labelSynColDelay->setText(tr("列延时:%1点").arg(sysPara->status.synColDelay)); sysPara->status.lastSynColDelay = sysPara->status.synColDelay; } /*--------------------------------------------------------------------------*/ static int i=0; i++; if(sysPara->status.stm32Verion == 0){ if(i % 10 == 0){ sysPara->devOp->readSTM32Version(); } } if(sysPara->status.stm32Time == 0){ if(i % 10 == 0){ sysPara->devOp->readSTM32Time(); } } if(sysPara->status.fpgaVersionNum == 0){ //因为进入系统就会进主界面,马上就会将版本号读出 if(i % 10 == 0){ sysPara->devOp->readFpgaVersionNum(); sysPara->devOp->readbuilDat(); } firstGetFpgaVersionNumFlag=1; QString ARM_Version; ARM_Version.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); ARM_Version = ARM_Version + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID; ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(0).arg(0).arg(0) ); } else{ static bool logflag5 = true; unsigned int num = sysPara->status.fpgaVersionNum & 0xf000; if(num != 0x1000 && num != 0x6000 && num != 0x2000 && num != 0x8000 && logflag5){ sysPara->status.fpgaVersionNum = 0; } else if(logflag5){ emit readFPGAVersionReady(); logflag5 = false; sysPara->devOp->writeFpgaPrintPara(true); QString ARM_Version; ARM_Version.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); ARM_Version = ARM_Version + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID; ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12) .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff) ); } } static bool logflag6 = false; if(!logflag6){ if(sysPara->status.fpgaVersionNum !=0 && sysPara->status.stm32Verion != 0){ UpdateUIVersion(); logflag6 = true; } } bool found_CNT1 = false; bool found_CNT2 = false; bool found_CNT3 = false; bool found_CNT4 = false; /*--------------------------------------------------------------------------*/ if(sysPara->status.variNum && (ui->stackedWidgetText->currentWidget() == ui->pagePrintTextDisplay)){ bool updatePrintTextDisplayFlag = false; for(int i = 0; i < sysPara->status.variNum; i++){ int val = 0; switch( Public::getType(sysPara->status.vars[i].type)) { case CALANDAR_YEAR:val = sysPara->status.calandar_and_dat.year;break; case CALANDAR_MONTH:val = sysPara->status.calandar_and_dat.month;break; case CALANDAR_DAY:val = sysPara->status.calandar_and_dat.day;break; case CALANDAR_WEEK:val = sysPara->status.calandar_and_dat.week;break; case CALANDAR_HOUR:val = sysPara->status.calandar_and_dat.hour;break; case CALANDAR_MINUTE:val = sysPara->status.calandar_and_dat.minute;break; case CALANDAR_SECOND:val = sysPara->status.calandar_and_dat.second;break; case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();found_CNT1=true;break; case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();found_CNT2=true;break; case CALANDAR_CNT3:val = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();found_CNT3=true;break; case CALANDAR_CNT4:val = QString::number(sysPara->para.cnt4CurrValue,10).toInt();found_CNT4=true;break; case RANDOMNUM : val = QString::number( sysPara->status.calandar_and_dat.RandomValue1, 16).toInt(); break; case CALANDAR_XDAY:val = sysPara->status.XXXDay;break; case EXPIRYDATE: break; default:qDebug() << "error,unknown variable type:" << sysPara->status.vars[i].type; } if(sysPara->status.vars[i].currVal != val) //{ updatePrintTextDisplayFlag = true; sysPara->status.vars[i].currVal = val; //} } if(updatePrintTextDisplayFlag) //减少不必要的刷新动作 { ui->widgetPrintTextDisplay->updateSysStatusToUI(); } } emit setCNT1Select(found_CNT1); emit setCNT2Select(found_CNT2); emit setCNT3Select(found_CNT3); if(sysPara->para.isEnableGetDataButton) { ui->pushButtonGetData->setEnabled(true); } else { ui->pushButtonGetData->setEnabled(false); } if(SIMULATE_PRINTING_MODE) enablePrintButton(true); ui->label_size->setText(tr("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32)); if(sysPara->status.currReclaimTankPos <= 5) sysPara->status.flagOfRebootEnable = true; else sysPara->status.flagOfRebootEnable = false; if(sysPara->status.flagOfRebootEnable || TEST_MODE){ ui->pushButton_Reboot->setEnabled(true); }else{ ui->pushButton_Reboot->setEnabled(false); } #ifdef NETWORKQRCODE //荆州-四机赛瓦要求:跟计数器同步 // ========== 新增:检测计数器1变化并同步更新二维码 ========== int currentCnt1Value = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue, 16).toInt(); if(sysPara->para.qrOption.counter != currentCnt1Value){ // 检查是否有二维码变量需要更新 if(sysPara->status.QRvariNum > 0 && sysPara->para.qrOption.AutoCount){ // 更新二维码选项中的计数器值 sysPara->para.qrOption.counter = currentCnt1Value; // 触发二维码重新生成 onUpdateDispQRCode(1); // 如果正在打印,重新发送打印数据 if(startPrintingFlag && printingFlag){ SendPrintDataToFpga(0); } } } // ======================================================== #endif } } void MainWindow::showPrintBitImage(){ if(sysPara){ unsigned char *dat; bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; if(MaxCol4000){ dat =sysPara->status.printDat_Normal; }else{ dat =sysPara->status.printDat; } for(int j = sysPara->status.currPrintCol - 1; j >= 0 ; j --){ for(int i = 0; i < sysPara->status.currPrintRow; i++){ if(dat[j*MAX_PRINT_ROW_BYTE_NUM + i/8] & (1<<(i%8))) printf("1"); else printf(" "); } printf("\n"); } } } //void MainWindow::on_pushButtonTXTOpen_pressed(){ //} void MainWindow::openPicFIleOpen(QString filePath,bool insertFlag) { fileChange=true; #ifdef TXTEDIT ui->textEditOption->onFileOpenN(filePath,insertFlag); emit setMainTabNow(0); #else Q_UNUSED(insertFlag); if(sysPara) { if(//filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || //filePath.endsWith(".jpg") || // ||filePath.endsWith(".bmp") filePath.endsWith(".png")) { QFile file(filePath); if(!file.open(QIODevice::ReadOnly)){ QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); return ; } else { QByteArray data = file.readAll(); QTextCodec *codec = Qt::codecForHtml(data); QString str = codec->toUnicode(data); if(filePath.startsWith(UDISK_DOC_ROOT_DIR)) str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 file.close (); ui->PicWidgetDisp->loadImage (filePath,false); ui->labelOpenedFileName->setText (QFileInfo(filePath).fileName()); LogInfo::setRunStatusText(tr("打开文件:")+(QString)(QFileInfo(filePath).fileName())); if(sysPara){ //QString str1 =QFileInfo( filePath).fileName (); sysPara->sysFile= PARA_ROOT_DIR+QFileInfo( filePath).baseName()+".dpn"; sysPara->loadParaFromFile ();// 从磁盘读取参数文件 emit openFileChange(); // emit openFileChange(); snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toLatin1().constData()); } /* other action */ PreviewPressed(); if(sysPara->status.addSpace) ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); ui->widgetPrintTextDisplay->setScaleRatio(3); //ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); } } } #endif } void MainWindow::on_pushButtonGetData_pressed() { emit getJSONData(); } void MainWindow::onPushButtonPreviewPressed(){ if(sysPara) { sysPara->para.EditMode = TXTFILE; if(previewFlag==0) { #ifdef SAVEWHENPREVIEW if(ui->textEditOption->fileName.isEmpty()){ QMessageBox::StandardButton ret = QMessageBox::Ok; ret = QMessageBox::warning(this, tr("提示"), tr("文件未保存,是否先保存文件!"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok) { ui->textEditOption->on_bottonSave_clicked(); } } else ui->textEditOption->on_bottonSave_clicked(); #else #endif PreviewPressed(); } } } int MainWindow::getVarStarRow(int x,int y,int h,int w,char *dat) { int t_x_start_pos = x; int t_x_end_pos = t_x_start_pos + w; bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); int t_y_start_pos = y - h/2; //int t_y_end_pos = y ; if(t_y_start_pos < 0) t_y_start_pos = 0; for(int j=y - h/2;j>0;j--) { char startRowFound=0; for(int i = t_x_start_pos; i < t_x_end_pos; i++) { if( (dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8)))) { startRowFound=1; dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] &=~ (1 << (j%8));//将画点取消掉 } } if(startRowFound)continue; t_y_start_pos=j+1; // qDebug()<<"F:"<status.currPrintRow = 0; sysPara->status.variNum = 0; sysPara->status.QRvariNum = 0; sysPara->status.ExpiryVarNum=0; unsigned char *dat; bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; if(MaxCol4000){ dat =sysPara->status.printDat_Normal; memset(dat,0,sizeof(sysPara->status.printDat_Normal)); }else{ dat =sysPara->status.printDat; memset(dat,0,sizeof(sysPara->status.printDat)); } //qDebug()<<"Preview:"; //////////////////////////////////////////////////////在这里清变量参数 sysPara->status.ExpiryVarNum=0; sysPara->status.CurrDateVariNum = 0; sysPara->status.classVariNum = 0; sysPara->print.ExpiryVar.startColPos = 0; sysPara->print.ExpiryVar.endRowPos = 0; sysPara->print.ExpiryVar.letterSpace =0; sysPara->print.CurDateVar.startColPos = 0; sysPara->print.CurDateVar.endRowPos = 0; sysPara->print.CurDateVar.letterSpace = 0; ///////////////////////////////////////////////////////////////// if(sysPara->para.EditMode==PICFILE) { ui->PicWidgetDisp->getPrintDat (dat,0,sysPara); ui->PicWidgetDisp->readVar (sysPara,0); // qDebug ()<<"v-n1:"<status.variNum<<"v-nLeter1:"<status.vars[0].letterSpace<<"v-nLeter2:"<status.vars[1].letterSpace<<"v-nLeter3:"<status.vars[2].letterSpace; sysPara->status.variNum=ui->PicWidgetDisp->getVarNum (); sysPara->status.currPrintCol=ui->PicWidgetDisp->getWidth (); sysPara->status.currPrintRow=ui->PicWidgetDisp->getPicRealHeight(); ui->PicWidgetDisp->getCharRamData(sysPara); } // end of PICFILE else if(sysPara->para.EditMode==TXTFILE)// TXTFLE { sysPara->status.addSpace = sysPara->para.checkSpace; ontextEdittextChanged(); coldot = (int)ui->textEdit->document()->size().width(); if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) { coldot = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); QMessageBox::warning(this, tr("警告"), tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); } int maxPicHeight = MAX_PRINT_ROW_NUM + 12; QSize size(coldot,maxPicHeight); sysPara->status.currPrintRow =0; sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff);//填充白色 //image.fill(0x00f0f000);//填充白色 QPainter painter(&image); //image.save("./printImage.jpg"); ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ image.save("./printImage.bmp"); //ui->widgetPrintTextDisplay int firstRow = maxPicHeight; /*--------------------------------------------------------------------------*/ for(int j = 0; j < maxPicHeight; j++){ //计算首行位置 for(int i = 0; i < coldot; i++){ QRgb rgb = image.pixel(i,j); if(rgb !=0x00ffffff )//& 0xff000000) { //qDebug()<maxPicHeight)?maxPicHeight:lastRow; sysPara->status.ExpiryVarNum=0; sysPara->status.CurrDateVariNum = 0; sysPara->status.classVariNum = 0; sysPara->print.ExpiryVar.startColPos = 0; sysPara->print.ExpiryVar.endRowPos = 0; sysPara->print.ExpiryVar.letterSpace =0; sysPara->print.CurDateVar.startColPos = 0; sysPara->print.CurDateVar.endRowPos = 0; sysPara->print.CurDateVar.letterSpace = 0; //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 for(int j = 0; j < lastRow - firstRow; j++){ // Y for(int i = 0; i < coldot; i++){ // QRgb rgb = image.pixel(i,j + firstRow); // 修改code判断逻辑 long unsigned int rgbValue = rgb & COLOR_MASK; if(rgb&0x80000000) { //判断alpha,rgb<0xFFE0E0E0->过滤偏白背景 if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 bool foundvar=0; if(j>0){ QRgb r_rgb = image.pixel(i,j + firstRow+1); if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; } if(foundvar){ if(sysPara->status.variNum < MAX_VARI_NUM){ sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); sysPara->status.vars[sysPara->status.variNum].endRowPos = j; if(varLastRowstatus.variNum ++;TempVarNum++; i+=5; //qDebug()<<"VARr:"<status.QRvariNum>=4)continue; if(rgbValue == MDT_RGB) { //MDT handleCode(i,j,&varLastRow, MDT); } else if(rgbValue == QR_RGB) { //QR handleCode(i,j,&varLastRow, QR); } else if(rgbValue == BAR_RGB) { //BAR handleCode(i,j,&varLastRow, BAR); } if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; } //else if((rgb & 0xfffff0)==0xff00f0) else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 bool foundExVar=0; if(j>0){ QRgb r_rgb = image.pixel(i,j + firstRow+1); if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;} } if(foundExVar) { qDebug()<<"expiryVar:"; //if(sysPara->status.ExpiryVarNum <3) { sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0); sysPara->print.ExpiryVar.endRowPos = j; if(varLastRowstatus.ExpiryVarNum == 0) sysPara->status.ExpiryVarNum ++; i+=10; } //else TempVarNum++; //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 } } else if((rgb & 0xfffff0)==0xff0cf0) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 //qDebug()<<"before found CurDateVar:"<0){ QRgb r_rgb = image.pixel(i,j + firstRow+1); if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} } if(foundExVar) { // qDebug()<<"found CurDateVar:"; //if(sysPara->status.ExpiryVarNum <2) { sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0); sysPara->print.CurDateVar.endRowPos = j; if(varLastRowstatus.CurrDateVariNum == 0) sysPara->status.CurrDateVariNum ++; i+=10; } //else TempVarNum++; //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 } } //else if((rgb & 0xffffff)==0x0032c8) else if((rgb & 0x0000ff)>0x0000c0 && (rgb & 0x00ff00)>0x002F00 && (rgb & 0x00ff0000)==0x00000000) { //qDebug()<<"before found class:"<status.classVariNum <3) { EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ; currCLass->startColPos = i+(sysPara->status.addSpace?i:0); if (currCLass->startColPos>1) currCLass->startColPos = currCLass->startColPos - 1; currCLass->endRowPos = j; if(varLastRowstatus.classVariNum == 0) sysPara->status.classVariNum ++; i+=5; } } } else { //Y = 0.299*R' + 0.587*G' + 0.114*B int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; if(y < 125 ) { dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 if((j+1) > sysPara->status.currPrintRow) { sysPara->status.currPrintRow = j+1; } } } }/*判断alpha end*/ } } // var //qDebug() <<"VarNum"<8){ setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); strTitle.append("\r\n"); strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); } //qDebug()<status.vars[0].startRowPos<status.vars[0].endRowPos<< sysPara->status.currPrintRow; // ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM //qDebug()<<"qrvar"<status.QRvariNum; searchQrVar(); //if(sysPara->status.ExpiryVarNum) searchExpiryVar(); //ui->widgetPrintTextDisplay->update(); //=============== if(sysPara->status.variNum){ // /*--------------------------------提取变量------------------------------------------*/ QString pattern = ""; QRegExp rx(pattern); QString textHtml = ui->textEdit->toHtml(); int from = 0; int varNum = 0; // 正常变量 while(from < textHtml.size() && from != -1) { from = textHtml.indexOf(rx,from);//返回匹配到到起始地址 bool ok; if(from != -1){//找到匹配的 from ++; if(varNum < sysPara->status.variNum){ qDebug() << rx.capturedTexts(); sysPara->status.vars[varNum].digitalNum = rx.cap(4).toInt(&ok);//第二个匹配,数字到个数 sysPara->status.vars[varNum].bold = (sysPara->status.vars[varNum].digitalNum%100) == 75; if(sysPara->status.vars[varNum].bold) sysPara->status.vars[varNum].digitalNum = sysPara->status.vars[varNum].digitalNum/100; sysPara->status.vars[varNum].type = rx.cap(2).toInt(&ok);//第一个匹配 strcpy(sysPara->status.vars[varNum].fontname,rx.cap(3).toUtf8().data()); sysPara->status.vars[varNum].width = rx.cap(5).toInt(&ok)*(sysPara->status.addSpace?2:1); sysPara->status.vars[varNum].height = rx.cap(6).toInt(&ok); //qDebug() <status.vars[varNum].startRowPos // << "endRowPos" << sysPara->status.vars[varNum].endRowPos // <<"Height"<status.vars[varNum].height; //sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].startRowPos + sysPara->status.vars[varNum].height-1; sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+1; if(sysPara->status.vars[varNum].startRowPos<0)sysPara->status.vars[varNum].startRowPos=0; //sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+(sysPara->status.vars[varNum].height==15||sysPara->status.vars[varNum].height==16?0:1); // qDebug()<<"Hei:"<status.vars[varNum].height; /*-----------------------------------------------------------------------------------------*/ int t_x_start_pos = sysPara->status.vars[varNum].startColPos; int t_x_end_pos = t_x_start_pos + sysPara->status.vars[varNum].width ; if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); int t_y_start_pos = sysPara->status.vars[varNum].startRowPos; int t_y_end_pos = sysPara->status.vars[varNum].endRowPos+1 ; if(t_y_start_pos < 0) t_y_start_pos = 0; for(int i = t_x_start_pos; i < t_x_end_pos; i++){ for(int j = t_y_start_pos; j < t_y_end_pos; j++){ dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 } } sysPara->status.vars[varNum].height = rx.cap(6).toInt(&ok); if(sysPara->status.vars[varNum].height>16 ){ if(sysPara->status.vars[varNum].height==24) ; else { if(sysPara->status.vars[varNum].startRowPos) { sysPara->status.vars[varNum].endRowPos--; sysPara->status.vars[varNum].startRowPos--; } } } if(sysPara->status.vars[varNum].type == RANDOMNUM) { //qDebug()<<"RAND:"<status.vars[varNum].type<< sysPara->status.vars[varNum].digitalNum; sysPara->status.RandomDigitNum = sysPara->status.vars[varNum].digitalNum; } if(sysPara->status.vars[varNum].type >59 && sysPara->status.vars[varNum].type<70) { sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].endRowPos-3; sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].startRowPos-3; } /*-----------------------------------------------------------------------------------------*/ int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[varNum].height); //qDebug()<<"MainWindows"<status.vars[varNum].height<status.vars[varNum].letterSpace = 0; if(sysPara->status.vars[varNum].digitalNum){ //算出letterspace QFont font; //font.setFamily(Public::getFontFamily(pixelSize)); font.setFamily(sysPara->status.vars[varNum].fontname); // 20160812 //pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0)); // font.setPixelSize(pixelSize); font.setPixelSize(sysPara->status.vars[varNum].height); font.setWeight(sysPara->status.vars[varNum].bold?QFont::Bold:QFont::Normal); font.setLetterSpacing(QFont::AbsoluteSpacing, 0); QFontMetrics fontMetrics(font); int charWidth = (fontMetrics.horizontalAdvance("0123456789")) / 10 ; if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ charWidth = (fontMetrics.horizontalAdvance("0123456789.m "))/13; } sysPara->status.vars[varNum].letterSpace = (sysPara->status.vars[varNum].width - charWidth * sysPara->status.vars[varNum].digitalNum) / (sysPara->status.vars[varNum].digitalNum); //sysPara->status.vars[varNum].width/sysPara->status.vars[varNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth; } if(varNum<7) varNum ++; } else { qDebug() << tr("warning,界面上有变量未显示完全"); } } } } //if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<status.vars[0].endRowPos ; /*--------------------------------------------------------------------------*/ generateCharRamData(); /*---------------------------------------------------------------------------*/ //sysPara->status.currPrintRow ++;//总的行数,从1~n,而不是从0~n, //if(sysPara->status.currPrintRow>39)sysPara->status.currPrintRow=39; if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1) sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; bool found=0; lastRow = sysPara->status.currPrintRow; //qDebug()<<"lastRow:"<status.currPrintRow; j >2 ; j--){ //计算首行位置 for(int i = 0; i < coldot; i++){ if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ lastRow = j+1; found=1;//qDebug()<<"fOUND:"<status.currPrintRow; break; } } if(found) break; } if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow =MAX_PRINT_ROW_NUM-1; if(lastRow20 &&lastRow<=25) lastRow =24; sysPara->status.currPrintRow =lastRow; //sysPara->status.currPrintRow = (lastRow > varLastRow) ? lastRow : varLastRow; //配合賴工省点打印少行問题 if(sysPara->status.specialVarPrint.SpecialVarEnable) { sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&sysPara->status.specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 20240716 } } // end of TxtMode // 交替打印 // sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; #ifdef _2DCODE_ if(sysPara->status.QRvariNum) { onUpdateDispQRCode(1); } #endif //if(sysPara->status.currPrintRow==11) sysPara->status.currPrintRow=12; int wmax = sysPara->status.currPrintRow; sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; else { if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1; wmax = sysPara->status.currAlterPrintRow; } /*-------------------------------切换到显示窗口-----------------------------------*/ if(sysPara->status.addSpace) ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, sysPara->para.AlterMode? sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); ui->widgetPrintTextDisplay->update(); //qDebug()<<"3"<status.currPrintRow; } previewFlag=0; } void MainWindow::showDat(unsigned char * Dat) { Q_UNUSED(Dat); } void MainWindow::alterDataPrint(unsigned char m) { if(sysPara) { ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); emit ui->widgetPrintTextDisplay->update(); } } void MainWindow::generateCharRamData(){/* 生成字模数据 */ if(sysPara->status.variNum){ QTextEdit textEdit; textEdit.document()->setDocumentMargin(0); textEdit.setLineWrapMode(QTextEdit::NoWrap); int ramAddress = 0; int i; qDebug()<<"sysPara->status.variNum:"<status.variNum; for( i = 0; i < sysPara->status.variNum; i++){ vars_t *p_var = &sysPara->status.vars[i]; p_var->bassAddr = -1; if(p_var->original){ //清除原来的记录 if(p_var->dat){ free(p_var->dat); } p_var->original = false; } int width; if(p_var->bassAddr == -1){ if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide) width = (p_var->digitalNum)?(13*(p_var->width/p_var->digitalNum)):12; else width = (p_var->digitalNum)?(10*(p_var->width/p_var->digitalNum)):12; int width2 = width;//+(sysPara->status.addSpace?width:0); int height = Public::derivePixelSizeFromHeight(p_var->height); // int height = p_var->height; textEdit.clear(); int DPI = textEdit.logicalDpiX(); DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 auto fontFamily = QString(p_var->fontname); textEdit.setFontFamily(fontFamily); if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ textEdit.insertHtml(QString("0123456789.m ") .arg(fontFamily) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 .arg(height*96/DPI).arg(p_var->bold?600:400)); //600表示加粗,400表示普通 }else{ textEdit.insertHtml(QString("0123456789") .arg(fontFamily) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 .arg(height*96/DPI).arg(p_var->bold?600:400)); } QFont font = textEdit.font(); font.setLetterSpacing(QFont::AbsoluteSpacing, p_var->letterSpace); textEdit.setFont(font); // width = p_var->width; qDebug() << "letterSpace: " << p_var->letterSpace<< "font:" << font.family()<< "font width:" << width; int imgHeight = height + 12; QSize size(width,imgHeight); QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff); QPainter painter(&image); textEdit.show(); //如果不显示,似乎不会绘制 textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ QString fileName = "/home/plg/doc/002.html"; QTextDocumentWriter writer(fileName); bool success = writer.write(textEdit.document()); textEdit.hide(); image.save(QString::number(i) + "varRam.png"); // 找到最下面的行 int lastValidRow = 0; for(int k = imgHeight - 1; k >= 0 ; k--){ for(int j = 0; j < width; j ++){ QRgb rgb = image.pixel(j,k); if(rgb&0xff000000){ lastValidRow = k + 1; break; } } if(lastValidRow != 0) break; } qDebug()<<"lastValidRow"<endRowPos<< p_var->startRowPos; int rowDiff = p_var->endRowPos - p_var->startRowPos; int firstValidRow = -1; // 变量的第一行所处的行地址 for(int y = 0; y < image.height(); ++y) { for(int x = 0; x < image.width(); ++x) { if(image.pixel(x, y) & 0xff000000) { firstValidRow = y; break; } } if(firstValidRow != -1) break; } firstValidRow = qMax(firstValidRow, 0); int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); // 一列占用字节数 if (rowByteNum > 0) {// 防崩溃保护 unsigned char *dat = (unsigned char *)calloc(width2,rowByteNum); for(int k = firstValidRow; k < lastValidRow; k++){ for(int j = 0; j < width; j ++){ QRgb rgb = image.pixel(j,k); int currRow = k - firstValidRow; if(((rgb >> 24)&0xff) > 0x80){ // 判断是否有效的像素点 dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8)); } } } p_var->bassAddr = ramAddress; p_var->datHeight = height; p_var->datWidth = width2; p_var->rowByteNum = rowByteNum; p_var->dat = dat; p_var->original = true; p_var->currVal = -1; //相当于初始化 ramAddress += rowByteNum * width2; } else { qDebug() << "startRowPos:" << p_var->startRowPos <<" endRowPos:" << p_var->endRowPos <<" rowDiff:" << rowDiff << " 按原逻辑,执行这一步的时候软件就已经崩溃了"; } } } } } void MainWindow::updateTotalCnt(int en) { // No50 USEING //sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt: // (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0; //if(en) sysPara->para.totalProductCnt=0; //sysPara->para.totalProductCnt = sysPara->status.totalProductCnt; // No51版本改进 sysPara->status.lastProductCnt = sysPara->status.productCnt; ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); ui->labelTotalProductCnt->setText(QString::number( sysPara->para.totalProductCnt+sysPara->status.totalProductCnt)); } static int numOfTextChange = 0; void MainWindow::on_pushButtonStartPrint_pressed() { unsigned int type = sysPara->status.fpgaVersionNum >> 12; if(sysPara->status.isPrinting){ qDebug("Mainwindow: Printing 开始打印"); }else{ qDebug("Mainwindow: Non printing 开始打印"); } static int fileCount = 0; fileCount++; if(fileCount > 5) { fileCount = 1; } if(sysPara){ bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; test_flag = 0; /******2020/2/29*****/ if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && type == 8) //同步模式下,判断喷印间隔是否设置合理 { QSizeF size = ui->textEdit->document()->size(); float stroke,print_len_min; stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; print_len_min = stroke * size.width(); if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable) { QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min)); return; } } /******2020/2/29 end*****/ #ifndef FPGATEST if(!SIMULATE_PRINTING_MODE){ if (!sysPara->status.reclainTankReachEnd) { return; } if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); return ; } if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ QMessageBox::information(this,tr("错误"),tr("墨线未开,请先开墨线开关!")); return ; } } #endif sysPara->devOp->highVoltageCtrl(1); sysPara->devOp->setHighVoltageAmplitudetoSTM32(); sysPara->status.waitHightVolOff = 0; if(!printingFlag)setRunStatus(tr("正在加高压...")); // 复位计数器 if(sysPara->status.FileChangeRestCntFlag){ if(sysPara->para.ResetAllProductCntEn) { sysPara->devOp->clearProductCnt(3 | 0x10); // [3]总产品计数器清零FPGA sysPara->para.totalProductCnt=0; } else if(sysPara->para.ResetProductCntEn) { sysPara->devOp->clearProductCnt(3); } sysPara->status.FileChangeRestCntFlag=0; sysPara->saveParaToFile(); } if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 else if(sysPara->para.EditMode == SCENE) onPreviewScene(); if(numOfTextChange >= 5){ numOfTextChange = 0; emit autoUpdateFontWidthByMainWindow((const unsigned int)sysPara->status.currPrintCol); } if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); return ; } // LogInfo::setRunStatusText(tr("有效打印区域 %1行 x %2 列").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); //if(sysPara->para.printTriggerMode != PRINT_TRIGGER_SYNCHRONIZER) if(!((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) && sysPara->para.eleEyeTriggerSynPrintEn)) ) { int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay; long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000); if((printTmUs/1000 + 3) > (sysPara->para.printDelayMs) && (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD) && (sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME ) ) // 在电眼方式下,是否需要判呢? { QMessageBox::critical(0,tr("错误"),tr("打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms").arg(printTmUs/1000).arg(sysPara->para.printDelayMs)); return ; } } sysPara->status.isPrinting=false; setRunStatus(tr("开始打印1")); qDebug()<textEdit->toPlainText()); SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2, if(sysPara->para.isCheckInsertTime) { if(!startPrintingFlag) { LogInfo::setRunStatusText(tr("开始打印")); } } else { LogInfo::setRunStatusText(tr("开始打印")); } /*-------------------------------------------------------------------*/ ui->labelSynColDelay->setText(""); sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据 /*--------------------------------暂停按钮------------------------------*/ ui->pushButtonPausePrint->setEnabled(true); // ui->pushButtonPausePrint->setText(tr("暂停打印")); /*---------------------------------开关回收槽------------------------------*/ enableReclaimCtrlButton(false); updatePrintDisplayLabel(); // 20170717 移动此,以观察条形码打印异常问题。 if(!startPrintingFlag) { sysPara->devOp->printCtrl(PRINT_CTRL_START); printingFlag = true; } else { //如果已经在打印,则不要在发送start命令,只要更新相应的数据即可 if(!printingFlag) //如果在暂停,重复取消暂停 on_pushButtonPausePrint_pressed(); } startPrintingFlag = true;sysPara->status.isPrinting=true; } } unsigned char blankDat1[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]={0}; void MainWindow::SendPrintDataToFpga(unsigned char alterEnable) { if(!sysPara) return ; fileChange=false; sysPara->devOp->writeFpgaPrintPara(1); /*务必放在最后一步*/ sysPara->devOp->writeFpgaVariCtrl(); sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址 // 交替打印处理 unsigned char *dat; size_t sizeofdat; bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; if(MaxCol4000){ dat =sysPara->status.printDat_Normal; sizeofdat = sizeof(sysPara->status.printDat_Normal); }else{ dat =sysPara->status.printDat; sizeofdat = sizeof(sysPara->status.printDat); } if(sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM <= 20000) sysPara->devOp->fpgaWr(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); else sysPara->devOp->fpgaWrD2(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); } int MainWindow::getCurrPrintStatus() { int printStatus; if (startPrintingFlag ) { if(printingFlag) { printStatus = 1; // 正在打印 } else { printStatus = 2; // 暂停喷印 } } else { printStatus = 3; // 停止打印 } return printStatus; } void MainWindow::updatePrintDisplayLabel(){ if(sysPara && !sysPara->status.reclainTankReachEnd){ setRunStatus(tr("回收槽未到底!!!!!!")); } else if(startPrintingFlag ){ if(printingFlag) setRunStatus(tr("正在喷印...............")); else setRunStatus(tr("暂停喷印...............")); } else setRunStatus(""); } void MainWindow::on_pushButtonStopPrint_pressed() { if(sysPara->status.isPrinting){ qDebug("Mainwindow: Printing 停止打印"); }else{ qDebug("Mainwindow: Non printing 停止打印"); } if(sysPara){ #ifndef FPGATEST if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { return; } #endif sysPara->status.flagOfAbnormalStatus = false; sysPara->status.isPrinting=false; sysPara->devOp->printCtrl2(1); sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT LogInfo::setRunStatusText(tr("停止打印")); ui->pushButtonStartPrint->setEnabled(true); ui->pushButtonPausePrint->setEnabled(false); // ui->pushButtonPausePrint->setText(tr("暂停打印")); enableReclaimCtrlButton(true); printingFlag = false; startPrintingFlag = false; updatePrintDisplayLabel(); sysPara->status. waitHightVolOff = 1; sysPara->saveParaToFile(); // 将相关配置保存 if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) { QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("提示"), tr("随机码文本将展出到U盘,请插入U盘"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); sysPara->devOp->RandTxtBakup(0); //备份到U盘 LogInfo::setRunStatusText("随机码文件导出完成."); } } } } void MainWindow::on_pushButtonPausePrint_pressed() { if(sysPara){ if(sysPara->status.WorkTimeOut && !SIMULATE_PRINTING_MODE) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP); return; } if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { return; } sysPara->devOp->printCtrl(PRINT_CTRL_PAUSE); LogInfo::setRunStatusText(printingFlag?tr("暂停打印"):tr("继续打印")); ui->pushButtonStartPrint->setEnabled(true); printingFlag = !printingFlag; if(printingFlag) { ui->pushButtonPausePrint->setText(tr("继续打印\n保持高压")); ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(0, 255, 0)}"); sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); } else { ui->pushButtonPausePrint->setText(tr("暂停打印\n停止高压")); ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(255, 0, 0)}"); } updatePrintDisplayLabel(); sysPara->saveParaToFile(); // 将相关配置保存 if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) { QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("提示"), tr("随机码文本将展出到U盘,请插入U盘"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); sysPara->devOp->RandTxtBakup(0); //备份到U盘 LogInfo::setRunStatusText("随机码文件导出完成."); } } } } void MainWindow::resetReclaimCtrlButtonText(){ ui->pushButtonReclaimTanOpen->setText(tr("开")); ui->pushButtonReclaimTankClose->setText(tr("关")); } void MainWindow::enableReclaimCtrlButton(bool enable) { ui->pushButtonReclaimTanOpen->setEnabled(enable); ui->pushButtonReclaimTankClose->setEnabled(enable); } void MainWindow::enablePushButtonStart(bool enable) { ui->pushButtonStart->setEnabled(enable); } void MainWindow::enablePrintButton(bool enable){ ui->pushButtonPausePrint->setEnabled(false); #ifdef FPGATEST enable = true; #endif ui->pushButtonStartPrint->setEnabled(enable); ui->pushButtonStopPrint->setEnabled(enable); } static int mainInkPumpCtrlStatus = 0; static int mainInkPumpCtrlCnt = 0; //100ms 为单位 void MainWindow::airPushingProcess() { if(sysPara){ if (sysPara->status.airPushing) { //qDebug()<< "start airPushingProcess "<status.airPushingOnTime; // 执行排气 7 秒 setRunStatus(tr("正在排气 ...............")); ++sysPara->status.airPushingOnTime; if(sysPara->status.airPushingOnTime >= 50) { static int delayCount = 0; ++delayCount; m_2sFlag = true; //sysPara->devOp->controlInkValve(false); //关供墨阀 if(delayCount >= 40) { m_2sFlag = false; } if(delayCount >= 60) { delayCount = 0; airPushTimer->stop(); sysPara->devOp->controlViscosityPump(false); reclaimTanOpen(); //qDebug()<< "start stop"; sysPara->status.airPushingDone = 1; sysPara->status.airPushing = 0; sysPara->status.airPushingOnTime = 0; } return; } if (sysPara->status.airPushingOnTime%10 >= 5) { sysPara->devOp->controlCycleValve(true); } else { sysPara->devOp->controlCycleValve(false); } if (mainInkPumpCtrlStatus == 0) { if(++mainInkPumpCtrlCnt > 15) { //100ms 为单位, 时间到关闭 sysPara->devOp->controlMainInkPump(false); sysPara->devOp->mainInkCtrl(); mainInkPumpCtrlStatus = 1; mainInkPumpCtrlCnt = 0; } } else if (mainInkPumpCtrlStatus == 1) { //100ms 为单位, 时间到开启 sysPara->devOp->controlMainInkPump(true); sysPara->devOp->mainInkCtrl(); mainInkPumpCtrlStatus = 2; } else if (mainInkPumpCtrlStatus == 2) { if(++mainInkPumpCtrlCnt>7) { sysPara->devOp->controlMainInkPump(false); sysPara->devOp->mainInkCtrl(); mainInkPumpCtrlStatus = 3; mainInkPumpCtrlCnt = 0; } } else if (mainInkPumpCtrlStatus == 3) { if(++mainInkPumpCtrlCnt>8) { sysPara->devOp->controlMainInkPump(true); sysPara->devOp->mainInkCtrl(); mainInkPumpCtrlStatus = 4; mainInkPumpCtrlCnt = 0; } } else if (mainInkPumpCtrlStatus == 4) { if(++mainInkPumpCtrlCnt>8) { sysPara->devOp->controlMainInkPump(false); sysPara->devOp->mainInkCtrl(); mainInkPumpCtrlStatus = 3; mainInkPumpCtrlCnt = 0; } } } } } void MainWindow::reclaimTanOpen() { // 还原当前模式 if (sysPara->status.airPushing) { sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore; } sysPara->status.isPumpValveControledByHand = false; sysPara->devOp->mainInkCtrl(); sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止 MySleep(1000); sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); ui->pushButtonReclaimTanOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("停止"):tr("开")); ui->pushButtonReclaimTankClose->setText(tr("关")); enablePrintButton(SIMULATE_PRINTING_MODE); sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/ // sysPara->status.reclaimTankstatus = 1; setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开")); if (!sysPara->para.reclaimTankTime) { LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); } sysPara->status.currReclaimOperationCnt = 0; sysPara->status.reclainTankReachEnd = false; sysPara->status.reclainOpenAppending = true; sysPara->status.reclainCloseAppending = false; sysPara->status.reclaimBlockedCnt = 0; sysPara->status.canRunAirPushing = false; } void MainWindow::handleCode(int col, int row, int *varLastRow, int type) { int idx = sysPara->status.QRvariNum; sysPara->print.QRvars[idx].type=type; sysPara->print.QRvars[idx].countEn=1; sysPara->print.QRvars[idx].Counter=sysPara->status.productCnt; sysPara->print.QRvars[idx].startColPos=col+(sysPara->status.addSpace?col:0); sysPara->print.QRvars[idx].endRowPos=row+1; if(*varLastRowstatus.QRvariNum++; } void MainWindow::handleCodeScene(int col, int row, int *varLastRow, int type, int textItemPosX, int textItemPosY) { int idx = sysPara->status.QRvariNum; sysPara->print.QRvars[idx].type=type; sysPara->print.QRvars[idx].countEn=1; sysPara->print.QRvars[idx].Counter=sysPara->status.productCnt; sysPara->print.QRvars[idx].startColPos=col+(sysPara->status.addSpace?col:0)+textItemPosX; sysPara->print.QRvars[idx].endRowPos=row+1+textItemPosY; if(*varLastRowstatus.QRvariNum++; } void MainWindow::on_pushButtonReclaimTanOpen_pressed() { if(sysPara){ if (!sysPara->status.reclaimTankBlockedAppending) { if (sysPara->status.canRunAirPushing && (sysPara->status.currReclaimTankPos == 0)) { // 回收槽关闭的情况下才可以执行排气;//2019/10/24 当回收槽未在顶的位置,不需要排气 if (!sysPara->status.airPushing) { // 先执行排气后开回收槽 sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand; sysPara->status.isPumpValveControledByHand = true; sysPara->devOp->mainInkCtrl(); sysPara->devOp->controlCycleValve(true); sysPara->devOp->controlViscosityPump(false);//关粘度泵 sysPara->devOp->controlMainInkPump(true);//主墨泵敞开 sysPara->devOp->mainInkCtrl(); sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 sysPara->devOp->controlInkValve(true); //墨水阀 sysPara->devOp->controlInkValvePWM(true); //墨水阀 //qDebug()<< "start airpushings"; sysPara->status.airPushing = 1; sysPara->status.airPushingDone = 0; sysPara->status.airPushingOnTime = 0; airPushTimer->start(100); // 100ms } } else reclaimTanOpen(); } if(sysPara->status.reclaimTankBlockedAppending) { sysPara->status.reclaimTankBlockedAppending = false; QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10; onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10); } } } } void MainWindow::on_pushButtonReclaimTankClose_pressed() { if(sysPara){ if(sysPara->status.reclaimTankBlockedAppending){ sysPara->status.reclaimTankBlockedAppending = false; QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ sysPara->status.currReclaimTankPos = 0; onReclainTankPositionChanged(0); } } sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); ui->pushButtonReclaimTanOpen->setText(tr("开")); ui->pushButtonReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("停止"):tr("关")); enablePrintButton(SIMULATE_PRINTING_MODE); sysPara->devOp->highVoltageCtrl(0); // sysPara->status.reclaimTankstatus = 2; setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭")); if(!sysPara->para.reclaimTankTime){ LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); } sysPara->status.currReclaimOperationCnt = 0; sysPara->status.reclainTankReachEnd = false; sysPara->status.reclainOpenAppending = false; sysPara->status.reclainCloseAppending = true; sysPara->status.reclaimBlockedCnt = 0; } } void MySleep(unsigned int msec); /* * 关机前务必保存参数 * */ void MainWindow::checkForPowerOff(){ if(sysPara->status.powerOffAppending){ if(!sysPara->status.selfCheckDone) sysPara->status.selfCheckDone = true; this->setDisabled(true); emit setDisableAll(); ////////关机时提高转速和回收泵压力,粘度泵和循环阀///// quint16 gearPumpValue_backup = sysPara->para.gearPumpValue; int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;; if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) { if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){ for(int i=25;i>21;i--) { if(i == 25){ sysPara->status.isPumpValveControledByHand = true; //停止自动 sysPara->devOp->controlInkValve(true); sysPara->devOp->controlInkValvePWM(true); sysPara->devOp->controlReclaimPump(true,true); sysPara->devOp->controlViscosityPump(true); sysPara->devOp->controlCycleValve(true); sysPara->para.gearPumpValue = 0; sysPara->devOp->WriteMoterPump(); } if(i == 22){ sysPara->devOp->controlInkValve(false); sysPara->devOp->controlInkValvePWM(false); } this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*2)); MySleep(2000); } } sysPara->devOp->controlReclaimTankOpen(true); sysPara->status.isPumpValveControledByHand = true; //停止自动 if(sysPara->para.gearPumpEnable ){ if(!sysPara->para.flagOfReclaimPumEnable){ sysPara->para.gearPumpValue = 360; sysPara->devOp->WriteMoterPump(); } else{ sysPara->devOp->controlReclaimPump(true,false); sysPara->para.gearPumpValue = 0; sysPara->devOp->WriteMoterPump(); } } else{ sysPara->para.reclaimPumpPWMWidth = 95; sysPara->devOp->controlReclaimPump(true,true); } if(!sysPara->devOp->isViscosityPumpOpen()) sysPara->devOp->controlViscosityPump(true); sysPara->devOp->controlCycleValve(true); sysPara->devOp->controlInkValve(false); //关供墨 sysPara->devOp->controlInkValvePWM(false); //关供墨 if(!TEST_MODE){ for(int i=14;i>7;i--) { if(i==13) sysPara->devOp->controlReclaimTankOpen(false); this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3)); MySleep(3000); } } if(!sysPara->status.lostCommuFlag){ sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); updateTotalCnt(0); sysPara->saveParaToFile(); // 关机前将相关配置保存 } sysPara->status.powerOffAppending = false; if(!TEST_MODE){ for(int i=7;i>0;i--) { if(i == 3) sysPara->devOp->controlReclaimTankClose(true); if(i == 2){ sysPara->devOp->controlViscosityPump(false); sysPara->devOp->controlCycleValve(false); sysPara->devOp->controlReclaimPump(false,false); sysPara->para.gearPumpValue = 0; sysPara->devOp->WriteMoterPump(); } this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3)); MySleep(3000); } } } emit CloseJd(); sysPara->para.gearPumpValue=gearPumpValue_backup; sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup; sysPara->devOp->controlCompressPump(false); setRunStatus(tr("准备关机......")); qDebug()<<"准备关机"; sysPara->para.totalProductCnt +=sysPara->status.totalProductCnt; sysPara->devOp->clearProductCnt(3 | 0x10);//总产器计数器立即清零 sysPara->para.ReadFileErrorCnt=0; sysPara->para.PowerOnErrorCnt=0; if(sysPara->para.isCntSaveStateValue) { sysPara->para.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); sysPara->para.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); sysPara->para.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); } updateTotalCnt(0); sysPara->saveParaToFile(); // 关机前将相关配置保存 sysPara->saveRFIDPara(); system("sync");//缓存同步 timerPowerOff->start(1000); } } static int numOfPowerOffCMD = 0; void MainWindow::sendPowerOffCmd(){ if(++numOfPowerOffCMD == 120){ sysPara->devOp->color_flag = 2; setRunStatus(tr("关机失败!!!")); timerPowerOff->stop(); numOfPowerOffCMD = 0; return; } sysPara->devOp->powerOff(); } void MainWindow::powerOffConfirmed(){ timerPowerOff->stop(); QProcess process; process.startDetached("poweroff"); qApp->exit(0); } void MainWindow::on_pushButtonStart_pressed() { QMessageBox::StandardButton ret; if(pushButtonFlag) ret = QMessageBox::information(this, tr("提示"), tr("是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动!"), QMessageBox::Ok | QMessageBox::Cancel); else ret = QMessageBox::information(this, tr("提示"), tr("是否启动齿轮泵?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ pushButtonFlag = !pushButtonFlag; if(pushButtonFlag) { ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(0, 255, 0)}"); ui->pushButtonStart->setText(tr("泵启动")); } else { ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(255, 0, 0)}"); ui->pushButtonStart->setText(tr("泵停止")); } //ui->pushButtonStart->setEnabled(false); emit pushButtonStartPressed(pushButtonFlag); } } void MainWindow::_on_pushButtonPowerOff_pressed(bool notice){ if(sysPara){ if(sysPara->status.currReclaimTankPos != 0) { QMessageBox::StandardButton ret = QMessageBox::Ok; if(notice) ret = QMessageBox::warning(this, tr("警告"), tr("回收槽未关,是否关闭回收槽后关机!"), QMessageBox::Ok | QMessageBox::Cancel); if (!notice || ret == QMessageBox::Ok){ system((char *)((QString("mkdir %1").arg(TESTDIR)).toLatin1().data())); system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toLatin1().data())); //先备份UP* sysPara->status.reclaimCloseCnt=10; on_pushButtonStopPrint_pressed(); on_pushButtonReclaimTankClose_pressed(); sysPara->status.powerOffAppending = true; enableReclaimCtrlButton(false); //所有的按钮全部屏蔽 } } else { QMessageBox::StandardButton ret = QMessageBox::Ok; if(notice) ret = QMessageBox::warning(this, tr("警告"), tr("是否确认关机?"), QMessageBox::Ok | QMessageBox::Cancel); if (!notice || ret == QMessageBox::Ok){ sysPara->status.powerOffAppending = true; checkForPowerOff(); } } } } void MySleep(unsigned int msec) { QTime dieTime = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } //extern MyInputMethod *myInputMethod; void MainWindow::ontextEdittextChanged() { bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; QSizeF size = ui->textEdit->document()->size(); sysPara->status.textEditTotalCol = size.width(); //编辑界面 ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(size.height()).arg(size.width())); if(size.width() > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ myInputMethod->getInputMethod()->on_Key_Backspace_released(); MySleep(300); } if(size.width() == 0) { //在通过关标选择文本然后删除的时候,不会调用cursorPosition事件 onTextEditCursorPositionChanged(); } if(0 10) { numOfTextChange = 0; emit autoUpdateFontWidthByMainWindow((const unsigned int)size.width()); } } QPoint QTextCursorPos(const QTextEdit * myTextEdit) { QPoint pt; QTextCursor tc=myTextEdit->textCursor(); QTextLayout *pLayout=tc.block().layout(); pt.setY(tc.position()-tc.block().position()); pt.setX(pLayout->lineForTextPosition(pt.y()).lineNumber()+tc.block().firstLineNumber()); return pt; } extern MyInputMethod *myInputMethod; void MainWindow::onTextEditCursorPositionChanged(){ for(int i = 0; i < 2; i++){ QTextCharFormat fmt = ui->textEdit->currentCharFormat (); QString s = ui->textEdit->document()->toPlainText(); QFont font = fmt.font(); QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); QLabel *labelFontFamily = ui->textEditOption->getLabelFontFamily(); QCheckBox *checkBoxBold = ui->textEditOption->getCheckBoxBold(); bool ok; //qDebug()<<"onTextEditCursorPositionChanged"<< font.family()<text().toInt(&ok,10)<logicalDpiX(); DPI = DPI?DPI:1; int pixeSize = font.pointSizeF()*DPI/72; if(pixeSize >= Public::getMinFontPixelSize()){ labelFontSize->setText(QString::number(Public::getAdjustedPixelSize(pixeSize))); checkBoxBold->setChecked(font.weight() == QFont::Bold); labelFontFamily->setText(font.family()); barcode->setFontSize(Public::getAdjustedPixelSize(pixeSize)); break; } else { if(s.length()<=1) { ui->textEdit->selectAll(); font.setFamily(Public::getFontFamily(labelFontSize->text().toInt(&ok,10) )); ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 ui->textEdit->moveCursor(QTextCursor::End); } else ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 } } } } void MainWindow::onLabelFaultRusumePressed(){ if(sysPara){ sysPara->status.flagOfSpeedAlarm = false; sysPara->status.mainInkPumpError = false; sysPara->status.mainInkPumpRunTmCnt = 0; sysPara->status.compressPumpError = false; sysPara->status.compressPumpRunTmCnt = 0; sysPara->devOp->resumeFault(); ui->labelRunStatus->clear(); sysPara->status.beeperOnFlag = false; sysPara->devOp->controlBeeper(false); sysPara->status.heaterONTimeCnt = 0; //加热块计数清零 ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); sysPara->status.DACDisable = false; sysPara->status.lastPhaseFault = 0; sysPara->status.phaseErrorCnt = 0; if(sysPara->status.lastHighVoltageFault && !(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){ sysPara->status.lastHighVoltageFault = false; flagOfClearHighVltageWarnning = true; } if(sysPara->status.gearPumpRunStopFlag && pushButtonFlag) { emit repeatInitedPid(); sysPara->status.gearPumpRunStopFlag = false;//齿轮泵报警恢复 } if((sysPara->devOp->color_flag == 2) ||(sysPara->devOp->color_flag == 1)) { sysPara->devOp->color_flag = 3; sysPara->devOp->controlYellowLight(false); sysPara->devOp->controlRedLight(false); } sysPara->status.visocityValueOverflowNum = 0; if(sysPara->status.visocityValueOverflowNum>=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM) // sysPara->status.viscosityFault = 0; sysPara->status.powerOffAfterPhaseFaultAppending = 0; sysPara->status.lastwarmInkPump = 0; sysPara->status.RecycleWarnCnt =0; sysPara->status.lastRecycleWarn =0 ; sysPara->status.powerOffAfterInkOrSOLVEmptyAppending=0; //sysPara->status.lastStatWarn=0; // 机器报故障后,点击故障恢复按钮,再点击打印按钮,“正在喷印中…”字符未立即显示出来,需等待大约10秒才会出现。 //LogInfo::setRunStatusText(tr("故障恢复")); sysPara->status.RecycleWarnCnt=0; sysPara->status.HVFaultCloseEn=0; if(sysPara->status.flagOfPressureFault){ sysPara->status.flagOfPressureFault = false; sysPara->status.isPumpValveControledByHand = false; sysPara->devOp->mainInkCtrl(); emit clearPressureFault(); } if(printingFlag) { sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); } } } void MainWindow::onEnableReclaimCtrlButton(bool flag) { enableReclaimCtrlButton(flag); } void MainWindow::onInkJetPrinterCurrentChanged(int index) { ui->senceEditOption->onInkJetPrinterCurrentChanged(index); } void MainWindow::onLabelProductCntPressed(){ if(sysPara){ QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("是否初始化产品计数?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ updateTotalCnt(0); sysPara->devOp->clearProductCnt(1); sysPara->saveParaToFile(); } } } void MainWindow::onLabelTotalProductCntPressed(){ if(sysPara){ QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("是否清除总产品计数?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ sysPara->devOp->clearProductCnt(1 | 0x10 );// [3]总产品计数器清零FPGA sysPara->para.totalProductCnt = 0; } } } void MainWindow::onPushButtonCNTResetNowPressed(){ if(sysPara){ // emit closeSerial(); QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("是否立即重新计米?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA sysPara->para.totalProductCnt = 0; } } } void MainWindow::on_bottonEditText_pressed() { //qDebug()<<"EditMode"<para.EditMode; if(sysPara->para.EditMode==TXTFILE){ bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); ontextEdittextChanged(); //显示大小 int coldot = (int)ui->textEdit->document()->size().width(); if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) { coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; QMessageBox::warning(this, tr("警告"), tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); } } else if(sysPara->para.EditMode==PICFILE){ emit openCurrFile(sysPara->para.lastOpenedFileName); } else if(sysPara->para.EditMode==SCENE){ //qDebug()<<"SCENE"; //emit openCurrFile(sysPara->para.lastOpenedFileName); ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); } } void MainWindow::on_pushButtonReduceTextDisplay_pressed() { ui->widgetPrintTextDisplay->reduceDisplay(); } void MainWindow::on_pushButtonEnlargeTextDisplay_pressed() { ui->widgetPrintTextDisplay->enlargeDisplay(); //update(); } /* * value以100ms为单位 * */ void MainWindow::onReclainTankPositionChanged(int value){ static bool init = false; static int totalCharNum = 0; if(!init){ int w = ui->labelReclaimStatus->geometry().width() - 1; //预留几个像素 QFontMetrics fontMetrics = QApplication::fontMetrics(); w -= fontMetrics.width(QString(" |>|")); int t = fontMetrics.width(QChar('-')); if(fontMetrics.width(QChar('-')) != fontMetrics.width(QChar(' '))){ LogInfo::setRunStatusText(tr("警告:‘-’和空格的宽度不一样")); //可能有的字体两者宽度不同 } totalCharNum = t?w/t:w; //t永远都不应该为零,保险起见 init = true; } if(sysPara){ int reclaimTime = sysPara->para.reclaimTankTime?sysPara->para.reclaimTankTime:15; int charNum = value*totalCharNum/(reclaimTime*10); charNum = (charNum > totalCharNum)?totalCharNum:charNum; QString str = " |"; for(int i = 0; i <= totalCharNum; i++) { //多加”>|“ if(i < charNum) str.append(QChar('-')); else if(i == charNum) str.append(QChar('>')); else str.append(QChar(' ')); } str.append(QChar('|')); ui->labelReclaimStatus->setText(str); } } void MainWindow::setRunStatus(QString str){ switch(sysPara->devOp->color_flag){ case 1: ui->labelRunStatus->setStyleSheet("color:yellow"); break; case 2: ui->labelRunStatus->setStyleSheet("color:red"); break; default: ui->labelRunStatus->setStyleSheet("color:black"); break; } ui->labelRunStatus->setText(str); } void MainWindow::changeTxtMode(QString str){ if(sysPara){ fileChange=true; sysPara->status.FileChangeRestCntFlag = true; emit openFileChange(); unsigned char SpecialVarEnable = 0; sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); } } void MainWindow::update_scroll() { ui->widgetPrintTextDisplay->scroll_update(); } void MainWindow::changeEditMode(int editMode) { if(sysPara){ //qDebug()<<"changeEditMode"<para.EditMode; if(sysPara->para.EditMode==PICFILE){ ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); ui->widgetPrintTextDisplay->update(); ui->pushButtonTXTOpen->show(); ui->textEditOption->editMode=sysPara->para.EditMode; } else if(sysPara->para.EditMode==TXTFILE) { // ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); // ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); sysPara->para.EditMode=TXTFILE; ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); ui->widgetPrintTextDisplay->update(); ui->pushButtonTXTOpen->hide(); ui->textEditOption->editMode=sysPara->para.EditMode; ui->textEditOption->editItemModeDone(); } else if(sysPara->para.EditMode==SCENE) { //qDebug()<<"CCCCCENE"; sysPara->para.EditMode=SCENE; ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); ui->widgetPrintTextDisplay->update(); ui->pushButtonTXTOpen->hide(); ui->textEditOption->editMode=sysPara->para.EditMode; //edit@12-12 ui->senceEditOption->show_scene_new_dlg(); } //ontextEdittextChanged(); //显示大小 20140831 if(sysPara->para.EditMode==SCENE) { onSwitchTimerShowItem(true); } else { onSwitchTimerShowItem(false); } } } TextEditOption* MainWindow::getTexteditOption() { return ui->textEditOption; } void MainWindow::SetEditMode(int mode) { ui->textEditOption->editMode = sysPara->para.EditMode; // if(sysPara->para.EditMode==SCENE) // { // timerShowItem->start(10); // } } void MainWindow::setRunStatus(QPixmap pixMap){ ui->labelRunStatus->setPixmap(pixMap); } void MainWindow::SetMainTabEdit(int n){ } void MainWindow::testPrint(){ //on_pushButtonStartPrint_pressed(); } void MainWindow::onEditBarCode(){ #ifdef _2DCODE_ if(sysPara) { dlgqrcode->move( 0,10); barcode->setWindowTitle(tr("条形码信息编辑")); //qDebug()<<"bcOption->height"<para.bcOption.height; barcode->SetOption((bcOption_t*)&sysPara->para.bcOption); barcode->show(); //barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); } #endif } void MainWindow::onBarCodeClose(){ #ifdef _2DCODE_ barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); unsigned char *dat; bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; if(MaxCol4000){ dat =sysPara->status.printDat_Normal; }else{ dat =sysPara->status.printDat; } if(barcode->flagCount) { barcode->getDat(dat,0); barcode->flagCount=0; ui->widgetPrintTextDisplay->update(); } if(barcode->flagInsert ) { barcode->flagInsert=0; if(sysPara->para.EditMode==PICFILE) { } else { //ui->textEditOption->InsertBarCodeToEdit(barcode->pictureName,barcode->imgBar.width(),barcode->imgBar.height()); QString html = ""; QTextCharFormat fmt = ui->textEditOption->textEdit->currentCharFormat (); ui->textEditOption->textEdit->insertHtml (html); ui->textEditOption->textEdit->mergeCurrentCharFormat(fmt); ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); } } sysPara->saveParaToFile(); #endif } void MainWindow::onEditQRCode(){ #ifdef _2DCODE_ if(sysPara) { dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); dlgqrcode->setWindowTitle(tr("二维码信息编辑")); dlgqrcode->setCntCheckBoxHide(1); dlgqrcode->show(); } #endif } void MainWindow::onInitQRCode(){ #ifdef _2DCODE_ if(sysPara) { dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); dlgqrcode->setWindowTitle(tr("二维码信息编辑")); //dlgqrcode->show(); } #endif } void MainWindow::onQRCodeClose(){ #ifdef _2DCODE_ // dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); if(dlgqrcode->flagInsert ) { dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); dlgqrcode->flagInsert=0; if(sysPara->para.EditMode==PICFILE){ return; } // qDebug()<<"flagInsert2"<flagInsert<bcWidth<bcHeight; ui->textEditOption->InsertBarCodeToEdit(dlgqrcode->pictureName,dlgqrcode->bcWidth,dlgqrcode->bcHeight); ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); } if( sysPara->para.qrOption.barCodeFlag != dlgqrcode->barCodeFlag) { sysPara->para.qrOption.barCodeFlag = dlgqrcode->barCodeFlag; ui->textEditOption->textEdit->setHtml(QApplication::translate("MainWindow", "\n" "\n" "


", 0)); } sysPara->saveParaToFile(); #endif } void MainWindow::onGenerateQRCode(QString strData) { dlgqrcode->extSetText(strData); dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); } void MainWindow::onShowAndHideItem() { /////////特殊条件 //while(1) { static bool startFlag= false, lastStarFlag = false; QList items = pPicScene->items(); foreach (QGraphicsItem *item, items) { PicTextItem *picText = qgraphicsitem_cast(item); if(picText->SpecialConditions) { //setRunStatus(tr("六个内容(%1,%2)").arg(picText->CatchCnt1CurrValue).arg(QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt())); if(picText->CatchCnt1StartValue <= QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() && QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() <= picText->CatchCnt1CurrValue) { picText->show(); startFlag = true; } else { picText->hide(); startFlag = false; } if(startFlag != lastStarFlag) { lastStarFlag = startFlag; //on_pushButtonStartPrint_pressed(); if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 else if(sysPara->para.EditMode == SCENE) onPreviewScene(); // unsigned char blankDat[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; // memset(blankDat,0,sizeof(blankDat)); // sysPara->devOp->fpgaWr(0,blankDat,sizeof(blankDat));//...所加的空白偏移地址 // sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat)); } } } //QApplication::processEvents(); } ////////////// } void MainWindow::onSwitchTimerShowItem(bool flag) { if(flag) { // timerShowItem->start(10); } else { timerShowItem->stop(); unsigned char SpecialVarEnable = 0; sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); } } void MainWindow::JSON_UpdateDATA(){ QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); bool ok; int font_size = labelFontSize->text().toInt(&ok,10); QString font_family = Public::getFontFamily(font_size); static int save_uniCode = 33; //数据码固定33位 ui->textEditOption->textEdit->clear();//宴令需要屏蔽 QString strContentPrint(sysPara->Get_JSON_DATA.PrintingContent); strContentPrint.replace(' '," "); QString strContent = sysPara->Get_JSON_DATA.QRCodeContent; int left_int = strContent.indexOf("https://dwz.cn/"); if(left_int == 0) { strContent = strContent.mid(8, strContent.size()); strContent = "www." + strContent; } if(sysPara->para.isRemoveCode) { QSize size(2,5); QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff);//填充白色 //image.fill(0x00f0f000);//填充白色 // QPainter painter(&image); // //image.save("./printImage.jpg"); // ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ image.save("/home/plg/doc/modbusQR.bmp"); } else { if(dlgqrcode->barCodeFlag == 1) { barcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str())); barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); } else { dlgqrcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str()), true); dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); } } QString save_text = ui->textEditOption->textEdit->toHtml(); if(save_text.contains("", Qt::CaseSensitive)){ int left_int = save_text.indexOf(""); QString str_html = save_text.left(left_int); //get the QRcode pic left html QString right_str_html = save_text.mid(left_int, save_text.size()); if(!sysPara->para.isRemoveDigitCode) { str_html += ""; left_int = right_str_html.indexOf(";\">") + 1; int index_size = QString(";\">").size(); QString right_html = right_str_html.mid(left_int+index_size+save_uniCode, right_str_html.size()); save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size(); // qDebug()<<"right_html="< ").arg(font_family) .arg(font_size).arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode); if(!right_html.startsWith("<")){ //situation: "$ProductUniqueCodexxxx" QString crash_word = right_html.left(right_html.indexOf("<")); txt_fomart += crash_word; // qDebug()<<"crash_word="<"); index_size = QString("").size(); QString final_str = right_html.mid(left_int +index_size, right_html.size()); str_html += final_str; } else { str_html += right_str_html; } // QMessageBox::StandardButton ret; // ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel); // if (ret == QMessageBox::Ok) { ui->textEditOption->textEdit->setHtml(str_html); ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); } }else{ QString txt_fomart = ""; txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); txt_fomart += strContentPrint.toUtf8(); txt_fomart += ""; txt_fomart += ""; if(!sysPara->para.isRemoveDigitCode) { txt_fomart += QString::fromUtf8(" ").arg(font_family).arg(font_size) .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode); save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size(); txt_fomart += ""; } else { txt_fomart += QString::fromUtf8(" ").arg(font_family).arg(font_size); } // QMessageBox::StandardButton ret; // ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel); // if (ret == QMessageBox::Ok) { ui->textEditOption->textEdit->insertHtml(txt_fomart); } // QString refresh_text = ui->textEditOption->textEdit->toHtml(); // ui->textEditOption->textEdit->setHtml(refresh_text); // ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); } if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 else if(sysPara->para.EditMode == SCENE) onPreviewScene(); //on_pushButtonStartPrint_pressed(); ui->label_24->setFocus(); //prevent keyboard pop up } QStringList stringListRecive; // mdOpenFile(QString("/home/plg/doc/%1").arg(fileName)); void MainWindow::modbusUpdateQRCode(){ // QString temp = QString(); sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 sysPara->status.printDoneFlag = false; static QString lastReceiveContent = ""; char temp[120] = {0}; int i,j = 0; for(i=0; i<110; i+=2) { //if(sysPara->modbusParas.QRcode_buf[i] == 0) break; temp[j] = sysPara->modbusParas.QRcode_buf[i]; j++; } if(strlen(&temp[1]) == 0) { LogInfo::setRunStatusText(tr("获取DM码内容为空!")); return; } if(sysPara->para.EditMode == TXTFILE) { QString receiveContent = QString::fromUtf8(&temp[1]); dlgqrcode->extSetText(receiveContent); LogInfo::setRunStatusText(tr("获取DM码内容:")); LogInfo::setRunStatusText(tr("receiveContent").arg(receiveContent)); // dlgqrcode->extSetText("asbasb"); dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); // ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp"); ui->textEditOption->textEdit->clear();//插入之前先清空 //ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp"); QString html = ""; ui->textEditOption->textEdit->setHtml(html); ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); //sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 if(receiveContent == lastReceiveContent) { LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同")); //sysPara->modbusStatus.printFinishFlag = 1;//置打印标志 MySleep(200); sysPara->status.printDoneFlag = true; return; } lastReceiveContent = receiveContent; sysPara->status.oneCodePrintOnce = true; on_pushButtonStartPrint_pressed();//开始打印 } else if(sysPara->para.EditMode == SCENE) { QString receiveContent = QString::fromUtf8(&temp[1]); LogInfo::setRunStatusText(tr("获取DM码内容:")); LogInfo::setRunStatusText(tr("receiveContent").arg(receiveContent)); if(receiveContent == lastReceiveContent) { LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同")); MySleep(200); sysPara->status.printDoneFlag = true; return; } lastReceiveContent = receiveContent; stringListRecive = receiveContent.split(";"); QString lastopenedFileName = sysPara->para.lastOpenedFileName; lastopenedFileName = QFileInfo(lastopenedFileName).baseName(); int left_int = lastopenedFileName.indexOf('@'); if(left_int == 0) { sysPara->status.forTemplateUse = true; emit scenefileOpen(sysPara->para.lastOpenedFileName,false);//sceneeditoption 接收这个信号然后打开文件 //emit fileNameChanged(QFileInfo(filePath).fileName()); sysPara->status.forTemplateUse = false; sysPara->status.oneCodePrintOnce = true; on_pushButtonStartPrint_pressed();//开始打印 } } } void MainWindow::onUpdateDispQRCode(int type){ #ifdef _2DCODE_ int varNum; qDebug()<<"onUpdateDispQRCode"; //QRcode string test // static int cc = 0; for(varNum=0;varNumstatus.QRvariNum;varNum++){ if(sysPara->print.QRvars[varNum].type<2) { sysPara->print.QRvars[varNum].Counter = sysPara->para.qrOption.counter; sysPara->print.QRvars[varNum].cntNum = sysPara->para.qrOption.cntNum; dlgqrcode->TextToQRImg((qrOption_t *)&sysPara->para.qrOption); dlgqrcode->getDat(sysPara,varNum); }else if(sysPara->print.QRvars[varNum].type==2) { QString txt,txt2,txt3,txt4,txtVar1,txtVar2; //char fmt[]="%08d%04d"; txt2=sysPara->para.bcOption.TxtModule; txt3=sysPara->para.bcOption.TxtLine; txt4=sysPara->para.bcOption.TxtLine1; sysPara->para.bcOption.var1Type =1; sysPara->para.bcOption.var2Type =2; txtVar1=barcode->getVarTxt(sysPara->para.bcOption.var1En,sysPara->para.bcOption.var1Type); txtVar2=barcode->getVarTxt(sysPara->para.bcOption.var2En,sysPara->para.bcOption.var2Type); //txt.sprintf(fmt,sysPara->status.calandar_and_dat.cnt1CurrValue,sysPara->status.calandar_and_dat.cnt2CurrValue); txt = txt2.trimmed()+txtVar1+txt3.trimmed()+txtVar2+txt4.trimmed(); barcode->TextToBCImg((bcOption_t *)&sysPara->para.bcOption,txt); // barcode->getDat2(sysPara,varNum); //qDebug()<<"update BAR"<status.calandar_and_dat.cnt1CurrValue<status.calandar_and_dat.cnt2CurrValue; //qDebug()<print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; if(sysPara->status.currPrintCol < (sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)) { sysPara->status.currPrintCol = sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width; } if (sysPara->status.currPrintRowprint.QRvars[varNum].endRowPos) { sysPara->status.currPrintRow = sysPara->print.QRvars[varNum].endRowPos; } //sysPara->status.currPrintCol = (sysPara->status.currPrintColprint.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)? // sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width:sysPara->status.currPrintCol; //sysPara->status.currPrintRow = (sysPara->status.currPrintRowprint.QRvars[varNum].endRowPos)?sysPara->print.QRvars[varNum].endRowPos:sysPara->status.currPrintRow; // qDebug()<<"onUpdate:"<< sysPara->print.QRvars[varNum].startColPos // <print.QRvars[varNum].endRowPos <print.QRvars[varNum].width // <print.QRvars[varNum].height <print.QRvars[varNum].type; } if(type) { sysPara->para.qrOption.DisplayUpdate=1; // ui->widgetPrintTextDisplay->updateSysStatusToUI(); if(sysPara->status.addSpace) ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow ).arg(sysPara->status.currPrintCol)); ui->widgetPrintTextDisplay->update(); //qDebug()<<"update BAR ??"; } #endif } int MainWindow::searchExpiryVar(QString html) { int varNum = 0; if( sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum || sysPara->status.classVariNum) { QString pattern = ""; // 1 type ,2 name,3 width,4 height //

< // QRegExp rx(pattern); QString textHtml = html==""? ui->textEdit->toHtml() : html; // qDebug() << "searchExpiryVar:"<< textHtml; int from = 0; // int xx =textHtml.size(); sysPara->print.ExpiryVar.type = 0; sysPara->print.CurDateVar.type = 0; //sysPara->print.CurDateVar[1].type = 0; sysPara->print.ClassVari.type = 0; while(from < textHtml.size() && from != -1){ from = textHtml.indexOf(rx,from); bool ok; if(from != -1) { from ++; if(varNum < 3) { QString s = rx.cap(3); int type = rx.cap(1).toInt(&ok); // 填充信息 //qDebug()<<"QVARName:"<print.ExpiryVar.type = type; sysPara->print.ExpiryVar.width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; sysPara->print.ExpiryVar.height = rx.cap(5).toInt(&ok); //sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-sysPara->print.ExpiryVar.height; sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-(sysPara->print.ExpiryVar.height-1); sysPara->print.ExpiryVar.letterSpace = rx.cap(2).toInt(); if(sysPara->print.ExpiryVar.startRowPos < 0) { sysPara->print.ExpiryVar.startRowPos = 0; } if(rx.cap(3).contains("75")) { sysPara->print.ExpiryVar.bold = 1; } else { sysPara->print.ExpiryVar.bold = 0; } // 直接更新有效期,并退出? ExpiryDotUpdate(1); varNum++; } else if(type == CURDATE || type==CURDATE + 10 || type==CURDATE + 20 || type==CURDATE + 30) { sysPara->print.CurDateVar.type = type; sysPara->print.CurDateVar.width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; sysPara->print.CurDateVar.height = rx.cap(5).toInt(&ok); sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); sysPara->print.CurDateVar.letterSpace = rx.cap(2).toInt(); if(sysPara->print.CurDateVar.startRowPos < 0) { sysPara->print.CurDateVar.startRowPos = 0; } if(rx.cap(3).contains("875")) { //qDebug()<<"bold"; sysPara->print.CurDateVar.bold = 1; } else { //qDebug()<<"normal"; sysPara->print.CurDateVar.bold = 0; } //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; // 生产日期即当前日期 ExpiryDotUpdate(2); varNum++; } else if(type == CURCLASS) { //qDebug()<<"CURCLASS:"<print.ClassVari ; currClass->type = type; currClass->width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; currClass->height = rx.cap(5).toInt(&ok); currClass->startRowPos = currClass->endRowPos-currClass->height-1; currClass->letterSpace = rx.cap(2).toInt(); if(rx.cap(3).contains("875")) { //qDebug()<<"bold"; currClass->bold = 1; } else { //qDebug()<<"normal"; currClass->bold = 0; } //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; // 生产日期即当前日期 ExpiryDotUpdate(3); varNum++; } } else if(varNum>=3) break; } //break; //if(varNum>sysPara->status.ExpiryVarNum)break; } } return varNum; } void MainWindow::ExpiryDotUpdate(char Mode) { //更新有效期 QTextEdit textEdit; //textEdit.document()->setDocumentMargin(0); textEdit.setLineWrapMode(QTextEdit::NoWrap); int height,width; //QDate curDate=QDate::currentDate(); EXPIRYVAR_t *p_var;//=(Mode==1)?&sysPara->print.ExpiryVar:&sysPara->print.CurDateVar; if(sysPara->status.flagOfAdjustWidth_1){ sysPara->print.ExpiryVar.splitMode = sysPara->status.splitMode_Adjust_1; sysPara->status.flagOfAdjustWidth_1 = false; } if(sysPara->status.flagOfAdjustWidth_2){ sysPara->print.CurDateVar.splitMode = sysPara->status.splitMode_Adjust_2; sysPara->status.flagOfAdjustWidth_2 = false; } if(Mode==1) { qDebug()<<"Mode==1"; if(sysPara->status.ExpiryVarNum == 0) { return; } p_var = &sysPara->print.ExpiryVar; QDate expiryDate=QDate::currentDate().addDays(sysPara->para.ExpiryDay); sysPara->print.ExpiryVar.year = expiryDate.year(); sysPara->print.ExpiryVar.month = expiryDate.month(); sysPara->print.ExpiryVar.day = expiryDate.day(); r_ExpiryDay = sysPara->para.ExpiryDay; } else if(Mode==2) { p_var = &sysPara->print.CurDateVar; if(sysPara->status.CurrDateVariNum == 0) { return; } } else if(Mode==3) { p_var = &sysPara->print.ClassVari; qDebug()<<"Mode==3"; if(sysPara->status.classVariNum == 0) { return; } } else return; { textEdit.clear(); height = p_var->height; width = p_var->width; QString str; QHash dateFormat; dateFormat.insert(0,"yyyy-MM-dd"); dateFormat.insert(1,"yyyy/MM/dd"); dateFormat.insert(2,"yyyyMMdd"); dateFormat.insert(3,"yyyy年MM月dd日"); dateFormat.insert(4,"yyyy-MM-dd hh:mm"); dateFormat.insert(5,"yyyy/MM/dd hh:mm"); dateFormat.insert(6,"yyyyMMddhhmm"); dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); dateFormat.insert(8,"hh:mm"); dateFormat.insert(9,"ddhhmm"); dateFormat.insert(10,"dd MM yy"); dateFormat.insert(11,"dd/MM/yy"); dateFormat.insert(12,"dd/MM/yyyy"); dateFormat.insert(13,"dd-MM-yy"); dateFormat.insert(14,"dd-MM-yyyy"); /*****轮班变量功能 start******/ /*00:00-08:00 08:00-16:00 16:00-00:00 */ QTime current_time =QTime::currentTime(); int hour = current_time.hour(); QString DateTime; if(Mode==1) { DateTime = QDateTime::currentDateTime().addDays(sysPara->para.ExpiryDay).toString(dateFormat.value(sysPara->print.ExpiryVar.splitMode)); } else if(Mode==2 ) { DateTime = QDateTime::currentDateTime().toString(dateFormat.value(p_var->splitMode)); } else if (Mode == 3) { if(hour >= 0 && hour <8) { dateFormat.insert(15,"A"); DateTime = "A"; } else if(hour >= 8 && hour < 16) { dateFormat.insert(15,"B"); DateTime = "B"; } else if(hour >= 16) { dateFormat.insert(15,"C"); DateTime = "C"; } } /*****轮班变量功能 end******/ int DPI = textEdit.logicalDpiX(); DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 if(p_var->bold) { textEdit.insertHtml(QString("%4") .arg(Public::getFontFamily(height-1,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 .arg(height*72/DPI-1) .arg(600) .arg(DateTime) ); //600表示加粗,400表示普通 } else { textEdit.insertHtml(QString("%4") .arg(Public::getFontFamily(height,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 .arg(height*72/DPI) .arg(400) .arg(DateTime) // .arg("x") ); //600表示加粗,400表示普通 } QFont font = textEdit.font(); font.setLetterSpacing(QFont::AbsoluteSpacing, p_var->letterSpace); textEdit.setFont(font); int imgHeight = height + 12; bool MaxCol4000; if(sysPara->status.flagOfNo67FPGA) MaxCol4000 = true; else MaxCol4000 = false; if(imgHeight> MAX_PRINT_ROW_NUM+12) imgHeight = MAX_PRINT_ROW_NUM+12; if(width> (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) width = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; QSize size(width+2,imgHeight); QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff); QPainter painter(&image); textEdit.show(); //如果不显示,似乎不会绘制 textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ textEdit.hide(); image.save("./Expiry.bmp"); int lastValidRow = 0; for(int k = imgHeight - 1; k >= 0 ; k--){ for(int j = 0; j < width+1; j ++){ QRgb rgb = image.pixel(j,k); if(rgb&0xff000000){ lastValidRow = k + 1; break; } } if(lastValidRow != 0) { break; } } int rowDiff = p_var->endRowPos - p_var->startRowPos; int firstValidRow=0; int firstValidRowDiff; if(lastValidRow >= rowDiff) { firstValidRow = lastValidRow - rowDiff; firstValidRowDiff = firstValidRow; } else { firstValidRow = 0; firstValidRowDiff = lastValidRow > rowDiff; } firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正 str="";//s2=""; int wStart=p_var->startColPos; int hStart= p_var->startRowPos; unsigned char *dat; if(MaxCol4000){ dat =sysPara->status.printDat_Normal; }else{ dat =sysPara->status.printDat; } for(int j = 2; j < width+1; j ++) { unsigned char c=0; hStart= p_var->startRowPos; c=dat[(wStart)*5+(hStart)/8]; for(int k = firstValidRow; k <= lastValidRow; k++) { QRgb rgb = image.pixel(j,k); if(((rgb >> 24)&0xff) > 0x80) { c |= (1 << (hStart%8)); } else { c &= ~(1 << (hStart%8)); } if(hStart%8==7) { dat[(wStart)*5+(hStart)/8]=c; c=dat[(wStart)*5+(hStart+1)/8]; } hStart++; } dat[(wStart)*5+(hStart)/8]=c; wStart++; } } } int MainWindow::searchQrVar(){ int varNum = 0; if( sysPara->status.QRvariNum){ QString pattern = ""; // 1 type ,2 name,3 width,4 height //

< // QRegExp rx(pattern); //QString textHtml = ui->textEdit->toHtml(); ///////////// QTextEdit textEdit ; for(int i=0;istatus.QRvariNum;i++) { if(sysPara->print.QRvars[i].type==0){ textEdit.insertHtml(QString("") .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 } else if(sysPara->print.QRvars[i].type==1){ textEdit.insertHtml(QString("") .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 } else if(sysPara->print.QRvars[i].type==2){ textEdit.insertHtml(QString("") .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 } } QString textHtml = textEdit.toHtml(); //////////// int from = 0; // int xx =textHtml.size(); while(from < textHtml.size() && from != -1){ from = textHtml.indexOf(rx,from); bool ok; //qDebug()<=9 && (sysPara->print.QRvars[varNum].type ==type-9)) { //sysPara->print.QRvars[varNum].type = type-9; sysPara->para.qrOption.type = type-9; sysPara->para.qrOption.width=sysPara->print.QRvars[varNum].width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; sysPara->para.qrOption.height =sysPara->print.QRvars[varNum].height = rx.cap(4).toInt(&ok); sysPara->print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; //qDebug()<<"type:"<print.QRvars[varNum].type<status.QRvariNum // <print.QRvars[varNum].startColPos<print.QRvars[varNum].startRowPos<print.QRvars[varNum].endRowPos // <print.QRvars[varNum].width<print.QRvars[varNum].height // <status.statWarn & WARN_STATUS_POWER_MON)) return; #endif strTitle = tr("高压故障,暂停打印."); strWarring = tr("高压故障:两高压偏转板间的电压检测异常");strWarring.append("\r\n"); strWarring.append(tr("1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座;"));strWarring.append("\r\n"); strWarring.append( tr("2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); //strWarring.append( tr("字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); strWarring.append( tr("3.高压线路漏电,请更换高压线路;"));strWarring.append("\r\n"); strWarring.append( tr("4.高压底座漏电,请更换高压底座。"));strWarring.append("\r\n"); emit ShowWarnningText(strTitle,strWarring); } void MainWindow::onStatusInkLeak(){ #ifdef X86TEST #else if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)) return; #endif strTitle = tr("墨水缸满报警"); strWarring = tr("墨水过多:墨水溢出");strWarring.append("\r\n"); strWarring.append(tr("1. 请停止添加墨水;"));strWarring.append("\r\n"); strWarring.append(tr("2. 请排出多余墨水。"));strWarring.append("\r\n"); emit ShowWarnningText(strTitle,strWarring); } void MainWindow::onStatusInkSwint(){ if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)) return; } void MainWindow::onStatusInkWaterLevel(){ #ifdef X86TEST #else if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) return; #endif strTitle = tr("墨水液位报警"); strWarring = tr("墨水液位:墨水即将耗尽");strWarring.append("\r\n"); strWarring.append(tr("1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。"));strWarring.append("\r\n"); emit ShowWarnningText(strTitle,strWarring); } void MainWindow::onStatusRecycleWarn(){ #ifdef X86TEST #else if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)) return; #endif strTitle = tr("回收故障,关闭回收槽,关墨线"); strWarring = tr("回收故障:未检测到有墨水回收");strWarring.append("\r\n"); strWarring.append( tr("1. 墨水未射入回收管,请修正墨线方向;"));strWarring.append("\r\n"); strWarring.append( tr("2. 墨水粘度太低,请更换新墨水;"));strWarring.append("\r\n"); strWarring.append( tr("3. 回收管堵塞,请清通或者更换回收管;"));strWarring.append("\r\n"); strWarring.append(tr("4. 回收泵故障,请清洗或者更换回收泵;"));strWarring.append("\r\n"); strWarring.append( tr("5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); //strWarring.append( tr(" 退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); emit ShowWarnningText(strTitle,strWarring); } void MainWindow::onStatusSolvLevelWarn(){ #ifdef X86TEST #else if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) return; #endif strTitle = tr("溶剂液位报警"); strWarring = tr("溶剂液位:溶剂即将耗尽");strWarring.append("\r\n"); strWarring .append(tr("1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。"));strWarring.append("\r\n"); emit ShowWarnningText(strTitle,strWarring); } void MainWindow::onStatusViscosityWarn(){ #ifdef X86TEST #else if(sysPara->status.viscosityFault==1) #endif { strTitle = tr("粘度故障报警"); strWarring = tr("粘度故障:墨水粘度无法自动调整");strWarring.append("\r\n"); strWarring.append( tr("1. 混合阀失灵,请冲洗或者更换混合阀;"));strWarring.append("\r\n"); strWarring.append( tr("2. 墨水罐内的墨水异常,请更换新墨水;"));strWarring.append("\r\n"); emit ShowWarnningText(strTitle,strWarring); #ifdef X86TEST #else } else if(sysPara->status.viscosityFault==2) { #endif strTitle = tr("粘度故障报警"); strWarring= tr("粘度计异常:");strWarring.append("\r\n"); strWarring.append(tr("1. 泵前过滤网堵塞,请更换泵前滤网;"));strWarring.append("\r\n"); strWarring.append( tr("2. 粘度泵异常,请清洗或更换粘度泵;"));strWarring.append("\r\n"); strWarring.append(tr("3. 粘度传感器异常,请检查传感器线路或者更换传感器."));strWarring.append("\r\n"); emit ShowWarnningText(strTitle,strWarring); } } void MainWindow::onStatusChargefault(){ #ifdef X86TEST #else if(sysPara->status.lastPhaseFault) #endif { strTitle = tr("相位故障报警"); strWarring = tr("相位故障:相位信号检测异常");strWarring.append("\r\n"); strWarring.append(tr("1. 墨水分裂不正常,请调整墨水分裂;"));strWarring.append("\r\n"); strWarring.append(tr("2. 充电槽或者相检头脏污,请清洗充电槽和相检头;"));strWarring.append("\r\n"); strWarring.append(tr("3. 放大板功能性异常,请更换放大板;"));strWarring.append("\r\n"); strWarring.append( tr("4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离;"));strWarring.append("\r\n"); strWarring.append( tr("5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰;"));strWarring.append("\r\n"); strWarring.append( tr("6. 墨水质量异常,请更换新墨水。"));strWarring.append("\r\n"); emit ShowWarnningText(strTitle,strWarring); } } void MainWindow::OnFinished(int event){ //msgtest->setText("孔一:60分钟灌浆结束条件!请点击\"结束\"按钮!"); //msgtest->show(); msgtest->hide(); } void MainWindow::onPreviewScene() { pPicScene->clearSelection(); QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff);//填充白色 QPainter painter(&image); pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect()); int coldot=0; if(sysPara){ bool MaxCol4000 = sysPara->status.flagOfNo67FPGA; previewFlag=1; sysPara->status.currPrintRow = 0; sysPara->status.variNum = 0; sysPara->status.QRvariNum = 0; unsigned char *dat; if(MaxCol4000){ dat =sysPara->status.printDat_Normal; memset(dat,0,sizeof(sysPara->status.printDat_Normal)); }else{ dat =sysPara->status.printDat; memset(dat,0,sizeof(sysPara->status.printDat)); } { sysPara->status.addSpace = sysPara->para.checkSpace; coldot = (int)ui->textEdit->document()->size().width(); coldot = pPicScene->itemsBoundingRect().width(); if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; int maxPicHeight = MAX_PRINT_ROW_NUM + 12; QSize size(coldot,maxPicHeight); sysPara->status.currPrintRow =0; sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff);//填充白色 QPainter painter(&image); QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight); pPicScene->render(&painter,QRectF(),validRectF); int firstRow = 0; int lastRow = MAX_PRINT_ROW_NUM > maxPicHeight? maxPicHeight:MAX_PRINT_ROW_NUM; //MAX_PRINT_ROW_NUM=40 int TempVarNum=0; int varLastRow=0; //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 for(int j = 0; j < lastRow - firstRow; j++){ // Y for(int i = 0; i < coldot; i++){ // QRgb rgb = image.pixel(i,j + firstRow); // 修改code判断逻辑 long unsigned int rgbValue = rgb & COLOR_MASK; if(rgb&0x80000000){ //判断alpha if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 bool foundvar=0; if(j>0){ QRgb r_rgb = image.pixel(i,j + firstRow+1); if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; } if(foundvar){ if(sysPara->status.variNum < MAX_VARI_NUM){ // sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); // sysPara->status.vars[sysPara->status.variNum].endRowPos = j; } else TempVarNum++; } } else if( (rgbValue == MDT_RGB) || (rgbValue == QR_RGB) || (rgbValue == BAR_RGB)){ if(sysPara->status.QRvariNum>=4)continue; if(rgbValue == MDT_RGB) { //MDT handleCode(i,j,&varLastRow, MDT); } else if(rgbValue == QR_RGB) { //QR handleCode(i,j,&varLastRow, QR); } else if(rgbValue == BAR_RGB) { //BAR handleCode(i,j,&varLastRow, BAR); } if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; } else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 } else if((rgb & 0xfffff0)==0xff0cf0) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 } else if((rgb & 0xffffff)==0xff00ff) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 } else { //Y = 0.299*R' + 0.587*G' + 0.114*B //非变量 int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; if(y < 125 ){ dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 if((j+1) > sysPara->status.currPrintRow) { sysPara->status.currPrintRow = j+1; } } } }/*判断alpha end*/ } } if(TempVarNum>MAX_VARI_NUM){ setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); strTitle.append("\r\n"); strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); } sysPara->status.variNum = 0; sysPara->status.ExpiryVarNum = 0; sysPara->print.ExpiryVar.startColPos = 0; sysPara->print.ExpiryVar.endRowPos = 0; sysPara->print.ExpiryVar.letterSpace =0; sysPara->print.CurDateVar.startColPos = 0; sysPara->print.CurDateVar.endRowPos = 0; sysPara->print.CurDateVar.letterSpace = 0; sysPara->status.CurrDateVariNum = 0; sysPara->status.QRvariNum=0;//lch add // 处理变量和常量的渲染和更新 handleSceneShow(MaxCol4000, dat); if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; bool found=0; lastRow = sysPara->status.currPrintRow; for(int j = sysPara->status.currPrintRow; j >2 ; j--){ //计算首行位置 for(int i = 0; i < coldot; i++){ if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ lastRow = j+1; found=1; break; } } if(found) break; } if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow = MAX_PRINT_ROW_NUM-1; if(lastRowstatus.currPrintRow = sysPara->status.currPrintRow > lastRow? sysPara->status.currPrintRow : lastRow; } if(sysPara->status.QRvariNum) { onUpdateDispQRCode(1); } int wmax = sysPara->status.currPrintRow; sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; else { if(sysPara->para.AlterMode==0) sysPara->para.AlterMode=1; wmax = sysPara->status.currAlterPrintRow; } /*-------------------------------切换到预览显示窗口-----------------------------------*/ ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, sysPara->para.AlterMode? sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); ui->widgetPrintTextDisplay->update(); } previewFlag=0; } int MainWindow::calculateMaxSpeed(int backup) { float stroke; int valid_array; int rongdian = 0; int mm; int oscfreq = 0; // QSizeF size = ui->textEdit->document()->size(); switch (sysPara->para.oscillatoFreq) { case CRYS_64K: oscfreq = 64000; break; case CRYS_83K: oscfreq = 83000; break; case CRYS_96K: oscfreq = 96000; break; case CRYS_128K: oscfreq = 128000; break; default: break; } stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; rongdian = sysPara->status.currPrintRow * (float)sysPara->para.reducedPixelNumRatio/100; valid_array = sysPara->status.currPrintRow - rongdian; switch (sysPara->para.currPrintMode) { case FAST_PRINT: mm = (float)(stroke * oscfreq /(sysPara->status.currPrintRow +1)); break; case STANDARD_PRINT: mm = (float)( (stroke * oscfreq) / (valid_array * 2)); break; case SLOW_PRINT_ONE: mm = (float)( (stroke * oscfreq) / (valid_array * 3)); break; case SLOW_PRINT_TWO: mm = (float)( (stroke * oscfreq) / (valid_array * 4)); break; case SLOW_PRINT_THR: mm = (float)( (stroke * oscfreq) / (valid_array * 5)); break; case SLOW_PRINT_FOR: mm = (float)( (stroke * oscfreq) / (valid_array * 6)); break; case SLOW_PRINT_FIV: mm = (float)( (stroke * oscfreq) / (valid_array * 7)); break; case SLOW_PRINT_SIX: mm = (float)( (stroke * oscfreq) / (valid_array * 8)); break; case SLOW_PRINT_SEV: mm = (float)( (stroke * oscfreq) / (valid_array * 9)); break; case SLOW_PRINT_EIG: mm = (float)( (stroke * oscfreq) / (valid_array * 10)); break; case SLOW_PRINT_NIE: mm = (float)( (stroke * oscfreq) / (valid_array * 11)); break; default: mm = backup/sysPara->para.synPulseNumPerMm; break; } return mm; } void MainWindow::Test_Start_Stop() { if(test_flag <=0) return; if(test_flag >= RECICLARNUMBER){ LogInfo::setRunStatusText(tr("回收槽开关检测完成!")); test_flag = 0; return; } if((test_flag%2) == 0){ if(!open_close){ on_pushButtonReclaimTanOpen_pressed(); open_close = 1; } } else if(test_flag%2 == 1){ if(open_close){ on_pushButtonReclaimTankClose_pressed(); open_close = 0; } } } int MainWindow::checkRange(QImage textImage, int textColdot, int posX, int posY) { int firstRow = 0;//变量显示底部会多一条横线 int lastRow = MAX_PRINT_ROW_NUM; int variNum = 0; for(int j = 0; j < lastRow - firstRow; j++){ // Y for(int i = 0; i < textColdot; i++){ // QRgb rgb = textImage.pixel(i,j + firstRow); long unsigned int rgbValue = rgb & COLOR_MASK; if((rgb&0x80000000)){ //判断alpha if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 bool textfoundvar = 0; if(j>0){ QRgb r_rgb = textImage.pixel(i,j + firstRow+1); if((r_rgb & 0xf0f0ff) != 0xf0f000 ) { textfoundvar =1; } } if(textfoundvar) { if(sysPara->status.variNum < MAX_VARI_NUM){ sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0)+posX; sysPara->status.vars[sysPara->status.variNum].endRowPos = j+posY; if(lastRowstatus.variNum ++; variNum++; i+=5;//scene 每一行可能都包含变量 } else variNum++; } } else if((rgbValue == MDT_RGB) || (rgbValue == QR_RGB) || (rgbValue == BAR_RGB)){ if(sysPara->status.QRvariNum>=4)continue; if(rgbValue == MDT_RGB) { //MDT handleCodeScene(i, j, &lastRow, MDT, posX, posY); } else if(rgbValue == QR_RGB) { //QR handleCodeScene(i, j, &lastRow, QR, posX, posY); } else if(rgbValue == BAR_RGB) { //BAR handleCodeScene(i, j, &lastRow, BAR, posX, posY); } if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; } else if((rgb & 0x0000ffff)==EXPIRY_VARI_RECONISE) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 bool foundExVar=0; if(j>0){ QRgb r_rgb = textImage.pixel(i,j + firstRow+1); if(((r_rgb & 0x0000ffff) != EXPIRY_VARI_RECONISE )){foundExVar =1;} } if(foundExVar) { if(sysPara->status.ExpiryVarNum == 0) { sysPara->status.ExpiryVarNum ++; } sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0)+posX; sysPara->print.ExpiryVar.endRowPos = j+posY; if(lastRow0){ QRgb r_rgb = textImage.pixel(i,j + firstRow+1); if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} } if(foundExVar) { if(sysPara->status.CurrDateVariNum == 0) { sysPara->status.CurrDateVariNum ++; } sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0)+posX; sysPara->print.CurDateVar.endRowPos = j + posY; if(lastRow sysPara->status.currPrintRow) { sysPara->status.currPrintRow = j+posY; } } } } return variNum; } void MainWindow::handleSceneShow(bool MaxCol4000, unsigned char *dat) { int myvariNum=0; QList items = ui->senceEditOption->getPicSceneItems(); foreach (QGraphicsItem *item, items) { PicTextItem *picText = qgraphicsitem_cast(item); bool ok; int textColdot=0; textColdot = picText->boundingRect().width(); if(textColdot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) textColdot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; int maxTextHeight = MAX_PRINT_ROW_NUM + 12; QSize textSize(textColdot, maxTextHeight); QImage textImage(textSize,QImage::Format_ARGB32); textImage.fill(0x00ffffff);//填充白色 QPainter textPainter(&textImage); QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,picText->document()->size().height()); pPicScene->render(&textPainter,QRectF(),validtextRectF); /*--------------------------------------------------------------------------*/ int textItemPosX; int textItemPosY; textItemPosX = picText->pos().x() - pPicScene->itemsBoundingRect().x(); textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 checkRange(textImage, textColdot, textItemPosX, textItemPosY); //===================一般变量===================== QString textVariPattern = ""; QRegExp textrx(textVariPattern); QString textHtml = picText->toHtml(); int from = 0; while(from < textHtml.size() && from != -1){ from = textHtml.indexOf(textrx,from); if(from != -1){//找到匹配的 from ++; if(myvariNum < sysPara->status.variNum) { sysPara->status.vars[myvariNum].digitalNum = textrx.cap(4).toInt(&ok);//第二个匹配,数字到个数 sysPara->status.vars[myvariNum].bold = (sysPara->status.vars[myvariNum].digitalNum%100) == 75; if(sysPara->status.vars[myvariNum].bold) sysPara->status.vars[myvariNum].digitalNum = sysPara->status.vars[myvariNum].digitalNum/100; sysPara->status.vars[myvariNum].type = textrx.cap(2).toInt(&ok);//第一个匹配 QByteArray fontNameUtf8 = textrx.cap(3).toUtf8(); strncpy(sysPara->status.vars[myvariNum].fontname, fontNameUtf8.data(), sizeof(sysPara->status.vars[myvariNum].fontname) - 1); sysPara->status.vars[myvariNum].fontname[sizeof(sysPara->status.vars[myvariNum].fontname) - 1] = '\0'; sysPara->status.vars[myvariNum].width = textrx.cap(5).toInt(&ok)*(sysPara->status.addSpace?2:1); sysPara->status.vars[myvariNum].height = textrx.cap(6).toInt(&ok); sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height+1; if(sysPara->status.vars[myvariNum].startRowPos<0) sysPara->status.vars[myvariNum].startRowPos=0; int item_x_start_pos = sysPara->status.vars[myvariNum].startColPos; int item_x_end_pos = item_x_start_pos + sysPara->status.vars[myvariNum].width ; if(item_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) item_x_end_pos = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; int item_y_start_pos = sysPara->status.vars[myvariNum].startRowPos; int item_y_end_pos = sysPara->status.vars[myvariNum].endRowPos+1 ; if(item_y_start_pos < 0) item_y_start_pos = 0; // 擦除占位图 for(int i = item_x_start_pos; i < item_x_end_pos; i++){ for(int j = item_y_start_pos; j < item_y_end_pos; j++){ dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 } } sysPara->status.vars[myvariNum].height = textrx.cap(6).toInt(&ok); if(sysPara->status.vars[myvariNum].height>16 ){ if(sysPara->status.vars[myvariNum].height==24) ; else { if(sysPara->status.vars[myvariNum].startRowPos) { sysPara->status.vars[myvariNum].endRowPos--; sysPara->status.vars[myvariNum].startRowPos--; } } } if(sysPara->status.vars[myvariNum].type == RANDOMNUM) { sysPara->status.RandomDigitNum = sysPara->status.vars[myvariNum].digitalNum; } sysPara->status.vars[myvariNum].letterSpace = 0; if(sysPara->status.vars[myvariNum].digitalNum){ //算出letterspace QFont font; font.setFamily(sysPara->status.vars[myvariNum].fontname); // 20160812 font.setPixelSize(sysPara->status.vars[myvariNum].height); font.setWeight(sysPara->status.vars[myvariNum].bold?QFont::Bold:QFont::Normal); font.setLetterSpacing(QFont::AbsoluteSpacing, 0); QFontMetrics fontMetrics(font); int charWidth = (fontMetrics.horizontalAdvance("0123456789"))/10 ; sysPara->status.vars[myvariNum].letterSpace = (sysPara->status.vars[myvariNum].width - charWidth * sysPara->status.vars[myvariNum].digitalNum) / (sysPara->status.vars[myvariNum].digitalNum); } myvariNum++; } } } //==========================一般变量结束======================= //=========================二维码变量================== searchQrVar(); //=========================有效期/生产日期变量================== searchExpiryVar(textHtml); //=========================数模转换================= generateCharRamData(); } } void MainWindow::UpdateDateTimeQRCode(QString strContent) { if(!printingFlag || !sysPara->para.isCheckInsertTime) { return ; } QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); bool ok; int font_size = labelFontSize->text().toInt(&ok,10); QString font_family = Public::getFontFamily(font_size); if(sysPara->para.EditMode == TXTFILE) { QFile file("/home/plg/doc/modbusQR.bmp"); if(file.exists()) { file.remove(); } if(dlgqrcode->barCodeFlag == 1) { barcode->extSetText(""); barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); } else { QString receiveContent = QString::fromUtf8(strContent.toStdString().c_str()); dlgqrcode->extSetText(receiveContent,sysPara->para.qrOption.type); dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); } QString txt_fomart = ""; txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); txt_fomart += barcode->getLabe_TxtString().toUtf8(); txt_fomart += " "; txt_fomart += ""; ui->textEditOption->textEdit->setHtml(txt_fomart); ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); on_pushButtonStartPrint_pressed();//开始打印 } } QSizeF MainWindow::getDocSize()const { QSizeF size = ui->textEdit->document()->size(); return size; } #ifdef EnableArabic void MainWindow::setOpenFileName(QString fileName){ qDebug()<<"set open fileName"<%1%2").arg(subname).arg(subsuffix2); ui->labelOpenedFileName->setText(stringhtml); }else{ font.setFamily("biyang"); ui->labelOpenedFileName->setFont(font); ui->labelOpenedFileName->setText(fileName); } }else{ font.setFamily("biyang"); ui->labelOpenedFileName->setFont(font); ui->labelOpenedFileName->setText(fileName); } }else{ ui->labelOpenedFileName->setText(fileName); } } #endif void MainWindow::showFPGAData(QByteArray data){ ui->textEdit->clear(); ui->textEdit->setText(QString::fromUtf8(data)); } void MainWindow::showFPGAqueuesize(int size){ sysPara->status.sizeFPGA = size; } void MainWindow::showSTM32queuesize(int size){ sysPara->status.sizeSTM32 = size; } void MainWindow::showqueueFPGAsize(int size){ sysPara->status.sizequeueFPGA = size; } void MainWindow::on_pushButton_Reboot_clicked() { QMessageBox::StandardButton ret = QMessageBox::Ok; ret = QMessageBox::warning(this, tr("警告"), tr("是否确认重启?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ if(!sysPara->status.selfCheckDone) sysPara->status.selfCheckDone = true; this->setDisabled(true); emit setDisableAll(); if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){ for(int i=15;i>11;i--) { if(i == 15){ sysPara->status.isPumpValveControledByHand = true; //停止自动 sysPara->devOp->controlInkValve(true); sysPara->devOp->controlInkValvePWM(true); sysPara->devOp->controlReclaimPump(true,true); sysPara->devOp->controlViscosityPump(true); sysPara->devOp->controlCycleValve(true); sysPara->para.gearPumpValue = 0; sysPara->devOp->WriteMoterPump(); } if(i == 12){ sysPara->devOp->controlInkValve(false); sysPara->devOp->controlInkValvePWM(false); } this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); MySleep(1000); } } sysPara->devOp->controlReclaimTankOpen(true); sysPara->status.isPumpValveControledByHand = true; //停止自动 if(sysPara->para.gearPumpEnable ){ if(!sysPara->para.flagOfReclaimPumEnable){ sysPara->para.gearPumpValue = 360; sysPara->devOp->WriteMoterPump(); } else{ sysPara->devOp->controlReclaimPump(true,false); sysPara->para.gearPumpValue = 0; sysPara->devOp->WriteMoterPump(); } } else{ sysPara->para.reclaimPumpPWMWidth = 95; sysPara->devOp->controlReclaimPump(true,true); } if(!sysPara->devOp->isViscosityPumpOpen()) sysPara->devOp->controlViscosityPump(true); sysPara->devOp->controlCycleValve(true); sysPara->devOp->controlInkValve(false); //关供墨 sysPara->devOp->controlInkValvePWM(false); //关供墨 if(!TEST_MODE){ for(int i=11;i>7;i--) { if(i==9) sysPara->devOp->controlReclaimTankOpen(false); this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); MySleep(1000); } } if(!sysPara->status.lostCommuFlag){ sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); updateTotalCnt(0); sysPara->saveParaToFile(); // 关机前将相关配置保存 } sysPara->status.powerOffAppending = false; if(!TEST_MODE){ for(int i=7;i>0;i--) { if(i == 5) sysPara->devOp->controlReclaimTankClose(true); if(i == 4){ sysPara->devOp->controlViscosityPump(false); sysPara->devOp->controlCycleValve(false); sysPara->devOp->controlReclaimPump(false,false); sysPara->para.gearPumpValue = 0; sysPara->devOp->WriteMoterPump(); } this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); MySleep(1000); } } sysPara->saveParaToFile(); // 关机前将相关配置保存 sysPara->saveRFIDPara(); MySleep(200); system("sync");//缓存同步 QCoreApplication::quit(); } } void MainWindow::setReBootQtUIEnable(bool flag){ ui->pushButton_Reboot->setEnabled(flag); } void MainWindow::on_pushButtonPowerOff_clicked() { _on_pushButtonPowerOff_pressed(true); } /** * @brief MainWindow::slt_updateNetworkQR * 响应 dlgQrCode::sig_updateNetworkQR 信号,将网络(TCP)收到的新二维码 * 更新到主界面的文本编辑区。 */ void MainWindow::slt_updateNetworkQR() { #ifdef _2DCODE_ // 图片模式下不操作文本编辑区,直接返回 if(sysPara->para.EditMode==PICFILE) return; sysPara->saveParaToFile(); // 刷新预览 if(sysPara->para.EditMode == TXTFILE) { PreviewPressed(); } else if(sysPara->para.EditMode == SCENE) { onPreviewScene(); } // 切换到预览页面,让用户看到更新后的二维码 ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); // 如果正在打印,立即发送新数据到 FPGA if(startPrintingFlag && printingFlag) { SendPrintDataToFpga(0); } #endif } void MainWindow::slt_clearAllQRCode() { #ifdef _2DCODE_ // 1. 清除 textEdit 中的所有二维码图片 QTextCursor cursor(ui->textEdit->document()); bool modified = false; while (!cursor.atEnd()) { cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); QTextCharFormat fmt = cursor.charFormat(); if (fmt.isImageFormat()) { QString imgName = fmt.toImageFormat().name(); // 删除所有二维码相关的图片(包括普通二维码和网络二维码) if (imgName.contains("QRV") || imgName.contains("DMTV") || imgName.contains("BARV") || imgName.contains("networkQR")) { cursor.deleteChar(); modified = true; } } cursor.clearSelection(); } // 2. 清除场景中的二维码变量标记 sysPara->status.QRvariNum = 0; memset(sysPara->print.QRvars, 0, sizeof(sysPara->print.QRvars)); // 3. 复位二维码参数 sysPara->para.qrOption.width = 0; sysPara->para.qrOption.height = 0; // 4. 刷新显示 if (modified) { ui->widgetPrintTextDisplay->update(); LogInfo::setRunStatusText(tr("已清除所有二维码,准备添加网络二维码")); } #endif } extern int baudRateValue; void MainWindow::UpdateUIVersion(){ int fpgaType = sysPara->status.fpgaVersionNum>>12; QString fpgaVersion; if(fpgaType == 6){ fpgaVersion = "72"; }else if(fpgaType == 1){ fpgaVersion = "67"; } fpgaVersion = fpgaVersion + QString("_F%1.%2.%3").arg(sysPara->status.fpgaVersionNum >> 12) .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff); QString STM32Ver = QString("S:%1.%2.%3_B%4").arg((sysPara->status.stm32Verion>>16)&0x7F) .arg((sysPara->status.stm32Verion>>8) & 0xFF).arg(sysPara->status.stm32Verion&0xFF).arg(baudRateValue); QString VernonBach = SUB_RFID; // VernonBach.sprintf("A%d.%d.%02d%s%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID); QString Mac = QString::number(sysPara->status.machineMac); LogInfo::showVerionInformation(Mac,VernonBach,fpgaVersion,STM32Ver,sysPara->status.flagOfPowerOnMode); } void MainWindow::checkPrintingInterval(){ unsigned int type = sysPara->status.fpgaVersionNum >> 12; if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && type == 8) //72版本同步模式下,判断喷印间隔是否设置合理 { QSizeF size = ui->textEdit->document()->size(); float stroke,print_len_min; stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; print_len_min = stroke * size.width(); if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable) { QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min)); return; } } }