/* * * *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 #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 #define MDTFLAG 0xff00FF10 #define QRFLAG 0xff00FF20 #define BARFLAG 0xff00FF30 #define MMVAR 1 #define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障 #define EXPIRY_VARI_RECONISE 0x0000FF #define RECICLARNUMBER 22 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();//ui->textEditOption->dlgQrcode ;// //barcode = ui->textEditOption->barcode;//new QBarCode(); 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())); // if(sysPara->para.EditMode==SCENE) // { // timerShowItem->start(10); // } printintFlag = 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))); 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())); #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); #if 1 pPicScene = new PicScene(this); //pPicScene->setSceneRect(QRectF(0,0, 3999, MAX_PRINT_ROW_NUM)); //edit@12-09 pPicScene->setSceneRect(QRectF(0,0, 3999, 220)); //ui->fileSceneViewer->pView->setScene((QGraphicsScene *)pPicScene); 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(addPicTextItem()),this,SLOT(onAddPicTextItem())); //connect(ui->senceEditOption,SIGNAL(importFile(QString)),this,SLOT(onSceneImport(QString))); //connect(ui->senceEditOption,SIGNAL(delItem()),this,SLOT(onDeleteItem())); //connect(ui->senceEditOption,SIGNAL(saveScene(QString)),this,SLOT(onSaveScene(QString))); //connect(ui->senceEditOption,SIGNAL(openSceneFile(QString)),this,SLOT(onOpenSceneFile(QString))); connect(ui->senceEditOption,SIGNAL(generateQRCode(QString)),this,SLOT(onGenerateQRCode(QString))); connect(ui->senceEditOption,SIGNAL(previewScene()),this,SLOT(onPreviewScene())); //connect(ui->senceEditOption,SIGNAL(editItem()),this,SLOT(onEditItem())); //connect(ui->textEditOption,SIGNAL(scenefileOpen(QString)),this,SLOT(onOpenSceneFile(QString))); 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()),this,SLOT(onEditItemDone())); 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))); //edit@12-14 // connect(ui->scrollArea->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(update_scroll())); //ui->graphicsView->setSizePolicy(QSizePolicy::Fixed); #endif // ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp"); #if 0 qDebug()<<"edit size heigh:"<stackedWidgetText->size().height()<<"edit size width:"<stackedWidgetText->size().width(); qDebug()<<"edit geometry bottomLeft:"<stackedWidgetText->geometry().bottomLeft(); qDebug()<<"edit geometry height:"<stackedWidgetText->geometry().height(); qDebug()<<"edit geometry x:"<stackedWidgetText->geometry().x(); qDebug()<<"edit geometry y:"<stackedWidgetText->mapToGlobal(ui->stackedWidgetText->pos()); #endif m_2sFlag = false; moveToThread(&ShowThead); //connect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem()),Qt::QueuedConnection); ShowThead.start(); ui->pushButtonStart->setHidden(true);//屏蔽紧急停机按钮 // if(PrintDatafile.exists()) PrintDatafile.remove(); // if(!PrintDatafile.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 // //QMessageBox::warning(0,"警告",QString("无法打开文件:mac.bin") ); // } } 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){ // sysPara->status.productCnt = 123; // sysPara->status.lastProductCnt = sysPara->status.productCnt ; //这会让产品计数显示出来 // qDebug()<<"sysPara->status.productCnt="<status.productCnt; #ifdef BOART_TEMP_DEVICE if(1) { if(sysPara->devOp->GetTemp(BOART_TEMP_DEVICE, (quint8 *)&sysPara->status.boardTemp) !=-1) { ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.boardTemp)+"°C"); // 主板温度 } } else #endif { 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")); //UpdateDateTimeQRCode(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); // ui->pushButtonCNTResetNow->setEnabled( sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME ); 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; //static int delayCount2 = 0; if(m_2sFlag) { //++delayCount2; //if(delayCount2 %10 ==5) { sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); //控制供墨阀开关 sysPara->devOp->controlInkValvePWM(!sysPara->devOp->isInkValveOpen1()); //控制供墨阀开关 //setRunStatus(tr("我已关闭供墨阀")); } } if(sysPara->status.boardTemp >= sysPara->para.FanTemperature) { //sysPara->devOp->controlFan1(1); //sysPara->devOp->controlFan2(1); } else { //sysPara->devOp->controlFan1(0); //sysPara->devOp->controlFan2(0); } ///////自动设置喷头温度 // if(sysPara->status.boardTemp <= 20) // { // sysPara->para.temperature = 38; // } // else if(sysPara->status.boardTemp > 20 && sysPara->status.boardTemp <26 ) // { // sysPara->para.temperature = 35; // } // else if(sysPara->status.boardTemp >= 26 && sysPara->status.boardTemp < 30 ) // { // sysPara->para.temperature = 32; // } // else if(sysPara->status.boardTemp >= 30 ) // { // sysPara->para.temperature = 20; // } QFile file("/dev/input/event1"); if(!file.exists()) { QWSServer::setCursorVisible(false); } else { QWSServer::setCursorVisible(true); } } } 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)) { std::cout<<"CurrDateVariNum:"<status.CurrDateVariNum<(sysPara->print.CurDateVar.splitMode)<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->status.productCnt ; //sysPara->para.qrOption.counter ++;//= sysPara->para.calandar_and_dat.cnt1CurrValue; sysPara->para.qrOption.counter +=sysPara->para.qrOption.CntInc; //if(sysPara->para.qrOption.counter% 60) sysPara->para.qrOption.counter+=40; 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(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag){ //if(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag){ //打印状态指示灯 sysPara->status.GreenLightOnFlag = true; } else{ sysPara->status.GreenLightOnFlag = false; sysPara->devOp->controlGreenLight(false); //sysPara->devOp->controlGreenLight(true); } if(sysPara->status.GreenLightOnFlag){ //报警会时有时无 if(!sysPara->para.isCheckPrintLight) { sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable()); } else { sysPara->devOp->controlGreenLight(true); } } } 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(){ if(sysPara){ #ifdef DEBUG1 sysPara->status.statWarn =0| WARN_STATUS_HDINT;//sysPara->status.statWarn; enablePrintButton(true); #endif #ifndef SYS_LINUX sysPara->status.statWarn =0;//sysPara->status.statWarn; enablePrintButton(true); #endif //ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT)); // sysPara->status.currReclaimTankPos #ifdef __HV_FOR_WANG_DEBUG__ /* 盖上喷头盖,启动高压 */ static int hdint = 0; static int reclainTankReachEnd = 0; //int curr_swit = !(sysPara->status.statWarn & WARN_STATUS_INK_SWINT);// curr_swit墨线开关 1->开, 0->关 if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关 if (sysPara->status.reclainTankReachEnd) { #if 0 int actHvAmp = sysPara->para.HighVoltageAmplitude; float tempHvAmp;// = sysPara->para.HighVoltageAmplitude * 1.73; if(sysPara->para.HighVoltageAmplitude == 0) { tempHvAmp = 0; } else if(sysPara->para.HighVoltageAmplitude == 1) { tempHvAmp = 63.5; } else { tempHvAmp = 63.5 + (sysPara->para.HighVoltageAmplitude - 1) * 0.51; } sysPara->para.HighVoltageAmplitude = (unsigned char)tempHvAmp; #endif sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); #if 0 sysPara->para.HighVoltageAmplitude = actHvAmp; #endif } } hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT); if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底 if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态 #if 0 int actHvAmp = sysPara->para.HighVoltageAmplitude; float tempHvAmp;// = sysPara->para.HighVoltageAmplitude * 1.73; if(sysPara->para.HighVoltageAmplitude == 0) { tempHvAmp = 0; } else if(sysPara->para.HighVoltageAmplitude == 1) { tempHvAmp = 63.5; } else { tempHvAmp = 63.5 + (sysPara->para.HighVoltageAmplitude - 1) * 0.51; } sysPara->para.HighVoltageAmplitude = (unsigned char)tempHvAmp; #endif sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); #if 0 sysPara->para.HighVoltageAmplitude = actHvAmp; #endif } } reclainTankReachEnd = sysPara->status.reclainTankReachEnd; #endif if(sysPara->status.lastStatWarn != sysPara->status.statWarn){ 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(printintFlag && startPrintingFlag) setRunStatus(tr("正在喷印...............")); } else { ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); if(printintFlag && 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) { 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"))); #ifndef DEBUG1 if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电 on_pushButtonPausePrint_pressed(); LogInfo::setRunStatusText(tr("高压故障,暂停打印")); setRunStatus(tr("高压故障,暂停打印")); strTitle = tr("高压故障,暂停打印."); sysPara->status.lastHighVoltageFault = true; } #endif //if(HVfaultCnt<9)HVfaultCnt++; //else{ 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; } //} } } //if(sysPara->status.viscosityDelayCnt) //ui->label_3->setText( QString::number(sysPara->status.viscosityDelayCnt/100,10) );//labViscoCnt /*-----------------------------------------------------------------------------------*/ 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; /*-----------------------------------------------------------------------------------*/ //updatePhaseIndicatorLight(); //此部分工作交给InkJetPrinter的来做了 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; } #ifdef RETANKACK else { if(sysPara->status.RecycleWarnCnt==0) ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); if(( sysPara->status.currReclaimTankPos/10 < sysPara->para.reclaimTankTime*0.85 ) | (sysPara->status.statWarn & WARN_STATUS_HDINT) ) sysPara->status.RecycleWarnCnt=0; if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone){ if(sysPara->para.RecycleWarnAction && startPrintingFlag && printintFlag ) on_pushButtonStopPrint_pressed(); if(sysPara->status.RecycleWarnCnt > 10) ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY){ ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); if(sysPara->para.RecycleWarnAction){ sysPara->status.lastRecycleWarn = 1; if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){ on_pushButtonReclaimTankClose_pressed(); LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线")); setRunStatus(tr("回收故障,关闭回收槽,关墨线")); //ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); } } } else{ sysPara->status.RecycleWarnCnt ++ ; } // } else { //sysPara->status.RecycleWarnCnt=0; } } #else else { if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone) { if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY) { sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY; 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("回收故障,关闭回收槽,关墨线")); //ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); } } 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--; } #endif #ifdef MIMA if(sysPara->status.WorkTimeOut) { if( printintFlag) on_pushButtonStopPrint_pressed(); else sysPara->devOp->printCtrl( PRINT_CTRL_STOP); setRunStatus(tr("维护时间已到,喷码机停止工作!")); } #endif //ui->labelCurrentTime->setText( QString().sprintf("c:%d,s:%d",sysPara->status.RecycleWarnCnt,sysPara->status.reclaimTankstatus) ); /*-----------------------------------------------------------------------------------*/ // sysPara->status.LightUpCnt ++ ; // if((sysPara->status.LightUpCnt%3) == 0){ // if(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag){ //打印状态指示灯 // sysPara->status.GreenLightOnFlag = true; // } // else{ // sysPara->status.GreenLightOnFlag = false; // sysPara->devOp->controlGreenLight(false); // } // if(sysPara->status.GreenLightOnFlag){ //报警会时有时无 // sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable()); // } // } if(ui->labelRunStatus->text().length()<4){ if(startPrintingFlag ){ if(printintFlag) setRunStatus(tr("正在喷印...............")); else setRunStatus(tr("暂停喷印...............")); } } // 20160620 新增主界面显示:压力,粘度,隔膜位置,晶振电压数,相位 //ui->labPress->setText(QString("%1").arg(sysPara->status.PRESSURE)); //ui->labViso->setText(QString("%1").arg(sysPara->status.viscosity) ); //ui->labPosition->setText(QString("%1").arg(sysPara->status.SEPTAL_POSITION)); //ui->labOscVol->setText(QString("%1").arg(sysPara->para.oscillatorVoltage) ); 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("%1").arg(sysPara->para.oscillatorVoltage) ); ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); //ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + "600"); } } 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 && printintFlag){ //已经在打印,则暂停打印 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; } int 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时间内墨点数/ 列需要墨点数 int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 return pulseNum; } void MainWindow::updateSysStatusToUI(){ 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); /* qDebug()<<"total_syn_pulse_num" //<status.productCnt) << QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16) << (unsigned int)(sysPara->status.total_syn_pulse_num) << (unsigned int)(sysPara->status.volGap_pulse_num); */ } 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 { int pulsePS = getMaxSpeedCalcPara();//No67 maxMM = (pulsePS/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距 } #ifdef DEBUG2 qDebug()<<"mm"<<"dotNum"<<"colNum"<<"pulseNum"<<"maxMM"<<"synNPCol"<<"divFre"; qDebug()<para.synNumPerCol<para.divideRatio<para.dotNumPerCol; #endif 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; } /*--------------------------------------------------------------------------*/ if(!sysPara->status.fpgaVersionNum && !sysPara->status.lostCommuFlag){ //因为进入系统就会进主界面,马上就会将版本号读出 sysPara->devOp->readFpgaVersionNum(); if(sysPara->status.fpgaVersionNum){ sysPara->devOp->writeFpgaPrintPara(true); } ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(SOFTWARE_VER_NUM).arg(0).arg(0).arg(0) ); } else{ QString ARM_Version; ARM_Version.sprintf("%d.%d.%02d_GuiL", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER); 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) ); } 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_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; #ifdef DEBUG_CNT case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,10).toInt();break; case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,10).toInt();break; #else 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; #endif 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; //val = QString::number( sysPara->status.calandar_and_dat.RandomValue2 ,16).toInt(); 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); } } void MainWindow::showPrintBitImage(){ if(sysPara){ unsigned char *dat; bool MaxCol4000; if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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.toAscii().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 && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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 && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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); //qDebug()<<"H0:"<PicWidgetDisp->getHeight()<PicWidgetDisp->getPicRealHeight(); } // 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); if(rgb&0x80000000) { //判断alpha,rgb<0xFFE0E0E0->过滤偏白背景 //if((rgb & 0xffffff) == 0xff0000) {j=40; break;} 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((rgb & 0x00ffff0) == 0x00ff10) { //MDT sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; if(varLastRowstatus.QRvariNum++; } else if((rgb & 0x00ffff0) == 0x00ff20) { //QR //qDebug()<<"FLAG:"<print.QRvars[sysPara->status.QRvariNum].type=QR; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; //qDebug()<<"qr start row:"<print.QRvars[sysPara->status.QRvariNum].startColPos; //qDebug()<<"qr end row:"<print.QRvars[sysPara->status.QRvariNum].endRowPos; if(varLastRowstatus.QRvariNum++; } else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; if(varLastRowstatus.QRvariNum++; } 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; //qDebug()<<"dddd currPrintRow:"<< sysPara->status.currPrintRow; } } } }/*判断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){ sysPara->status.vars[varNum].digitalNum = rx.cap(3).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);//第一个匹配 sysPara->status.vars[varNum].width = rx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); sysPara->status.vars[varNum].height = rx.cap(5).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(5).toInt(&ok)-1; 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(Public::getFontFamily(pixelSize,sysPara->status.vars[varNum].type )); // 20160812 //pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0)); font.setPixelSize(pixelSize); font.setWeight(sysPara->status.vars[varNum].bold?QFont::Bold:QFont::Normal); //font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); QFontMetrics fontMetrics(font); int charWidth = (fontMetrics.width("0123456789"))/10 ; sysPara->status.vars[varNum].letterSpace = sysPara->para.textEditCharSpace; //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; //配合賴工省点打印少行問题 //qDebug()<<"lastRow:"<status.currPrintRow; if(sysPara->status.specialVarPrint.SpecialVarEnable) { sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&sysPara->status.specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 20240716 } } // end of TxtMode //qDebug() << "varnum:"<status.variNum; // 交替打印 // 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) { #ifdef DEBUG1 int i,j,x=MAX_PRINT_ROW_BYTE_NUM*sysPara->status.currPrintCol; for(j=0;j<2;j++){ for(i=0;iwidgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); //sysPara->devOp->writeFpgaPrintPara(); /*务必放在最后一步*/ //sysPara->devOp->writeFpgaVariCtrl(); //SendPrintDataToFpga (m); emit ui->widgetPrintTextDisplay->update(); } } /* 000 000 000 0000 0 000000 000 0000000 000 000 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000 0 000 0 000 0 0 0 0 0 0 000 0 0 00 0 00 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 000 0 0 0 0 0 0 00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000 00000 0000000 0000 0 0000 000 0 000 0000 */ //#define DEBUG4 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 j; #if 0 //同一个点陣的变量有BUG qDebug()<<"p_var->height:"<height; if(p_var->height>6) { for( j = 0; j < i; j ++){ //重复检测是否有重复大小的字存在 if(p_var->height == sysPara->status.vars[j].height){ p_var->bassAddr = sysPara->status.vars[j].bassAddr; p_var->datHeight = sysPara->status.vars[j].datHeight; p_var->datWidth = sysPara->status.vars[j].datWidth; p_var->rowByteNum = sysPara->status.vars[j].rowByteNum; p_var->dat = sysPara->status.vars[j].dat; break; } } } #endif 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); textEdit.clear(); int DPI = textEdit.logicalDpiX(); DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ textEdit.insertHtml(QString("0123456789.m ") .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(p_var->bold?600:400)); //600表示加粗,400表示普通 }else{ textEdit.insertHtml(QString("0123456789") .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(p_var->bold?600:400)); //600表示加粗,400表示普通 } QFont font = textEdit.font(); font.setLetterSpacing(QFont::AbsoluteSpacing,p_var->letterSpace); textEdit.setFont(font); // qDebug() << "height:" << height << "fontFamily:" << Public::getFontFamily(height); // qDebug() << "width2:" << width2 << "fontFamily:" << Public::getFontFamily(height); 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*/ textEdit.hide(); image.save(QString::number(i) + "varRam.png"); #ifdef DEBUG4 //image.save("./var.png"); #endif // 找到最下面的行 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 = 0; // 变量的第一行所处的行地址 int firstValidRowDiff;// 看起来和上面的参数一样 qDebug()<<"rowDiff"<=0) break; } rowDiff = lastValidRow-firstValidRow; firstValidRowDiff = firstValidRow/2; */ if(lastValidRow >= rowDiff){ firstValidRow = lastValidRow - rowDiff; firstValidRowDiff = firstValidRow; } else { firstValidRow = 0; firstValidRowDiff = lastValidRow > rowDiff; } firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正 int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); // 一列占用字节数 unsigned char *dat = (unsigned char *)calloc(width2,rowByteNum); #ifdef DEBUG4 s2.sprintf ("firstValidRow:%d,lastValidRow:%d,rowByteNum:%d,width:%d ,rowDiff:%d\n\r",firstValidRow,lastValidRow,rowByteNum,width,rowDiff) ; qDebug()<> 24)&0xff) > 0x80){ // 判断是否有效的像素点 dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8)); #ifdef DEBUG4 s2.sprintf("%02X",rowByteNum*j + currRow/8); str+=s2; #endif } else{ #ifdef DEBUG4 s2.sprintf(" -"); str+=s2; #endif } } #ifdef DEBUG4 qDebug()<startRowPos,p_var->endRowPos,p_var->height); //qDebug()<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; } } } } 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() { if(sysPara->status.isPrinting){ qDebug("Mainwindow: Printing 开始打印"); }else{ qDebug("Mainwindow: Non printing 开始打印"); } static int fileCount = 0; fileCount++; if(fileCount > 5) { fileCount = 1; } // QString fileName = "/home/plg/doc/SavePrintFile"; // fileName += QString::number(fileCount) + ".html"; // QTextDocumentWriter writer(fileName); // writer.write(ui->textEditOption->textEdit->document()); if(sysPara){ bool MaxCol4000; if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; #ifdef X86TEST //sysPara->status.statWarn |=WARN_STATUS_HDINT; #endif #ifndef SYS_LINUX sysPara->status.statWarn =0; #endif #ifdef MYTEST #else #ifdef AM335TEST #else #ifdef MIMA static int xxxm=0; if(xxxm==0){ QFile file("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o"); if(!file.exists()) { LogInfo::setRunStatusText(QString("missing libQtssl.o")); return; } } xxxm=1; if(sysPara->status.WorkTimeOut) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP); return; } #endif #endif #endif test_flag = 0; /******2020/2/29*****/ // qDebug()<<"sysPara->para.printTriggerMode "<< sysPara->para.printTriggerMode; if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) //同步模式下,判断喷印间隔是否设置合理 { 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*****/ 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 ; } } //if(printintFlag && !sysPara->status.FileChangeRestCntFlag) return; // 发送数据到 外接屏 2017-07-25 sysPara->devOp->DatToDisp(sysPara->para.lastOpenedFileName,0); #ifdef __HV_FOR_WANG_DEBUG__ /* 盖上喷头盖,启动高压 */ //sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); #else sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); #endif sysPara->status.waitHightVolOff = 0; if(!printintFlag)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); printintFlag = true; } else { //如果已经在打印,则不要在发送start命令,只要更新相应的数据即可 if(!printintFlag) //如果在暂停,重复取消暂停 on_pushButtonPausePrint_pressed(); } startPrintingFlag = true;sysPara->status.isPrinting=true; } } void MainWindow::SendPrintDataToFpga(unsigned char alterEnable) { if(!sysPara) return ; fileChange=false; sysPara->devOp->writeFpgaPrintPara(1); /*务必放在最后一步*/ sysPara->devOp->writeFpgaVariCtrl(); unsigned char blankDat[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; memset(blankDat,0,sizeof(blankDat)); sysPara->devOp->fpgaWr(0,blankDat,sizeof(blankDat));//...所加的空白偏移地址 // 交替打印处理 #ifdef FXCHG unsigned char *dat; size_t sizeofdat; bool MaxCol4000; if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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->para.printOnce) // { // if(sysPara->status.oneCodePrintOnce) // { // sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); // } // sysPara->status.oneCodePrintOnce = false; // } // else // { //sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); sysPara->devOp->fpgaWr(sizeof(blankDat),dat,sizeofdat-sizeof(blankDat)); // } #else if(sysPara->para.alterPrint.enable) { int len=MAX_PRINT_ROW_BYTE_NUM*(sysPara->status.currPrintCol); if(alterEnable==1) sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat1,len ); // alter1 else if(alterEnable==2) sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat2, len); // alter2 else sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat1, sizeof(sysPara->status.printAlterDat1)-sizeof(blankDat)); // alter2 } else sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat)); //将要打印的数据发送到fpga #endif #if 0 int printDataIndex=0; char xor_value; QFile xor_record_file("xor_record.txt"); for (int i = 0; i< sizeof(blankDat);) { xor_value = 0; xor_value ^= blankDat[i]; xor_value ^= blankDat[i+1]; xor_value ^= blankDat[i+2]; xor_value ^= blankDat[i+3]; xor_value ^= blankDat[i+4]; sysPara->devOp->fpgaWr(i,blankDat + i,5); //sysPara->devOp->readPrintDataXor(); sysPara->devOp->readbuilDat(); if (((sysPara->status.build_dat.builTime & 0xFF00)>>8) != xor_value) { //out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7; qDebug()<<"sequence "<status.build_dat.builTime & 0xFF00)>>8)<<"xor_value "<status.build_dat.builTime).arg(xor_value)); } i = i+5; printDataIndex = i; } for (int i = 0; i< sizeof(sysPara->status.printDat) - sizeof(blankDat);) { xor_value = 0; xor_value ^= sysPara->status.printDat[i]; xor_value ^= sysPara->status.printDat[i+1]; xor_value ^= sysPara->status.printDat[i+2]; xor_value ^= sysPara->status.printDat[i+3]; xor_value ^= sysPara->status.printDat[i+4]; sysPara->devOp->fpgaWr(printDataIndex + i, (unsigned char*)sysPara->status.printDat + i, 5); //sysPara->devOp->readPrintDataXor(); sysPara->devOp->readbuilDat(); if (((sysPara->status.build_dat.builTime & 0xFF00)>>8) != xor_value) { qDebug()<<"sequence "<status.build_dat.builTime & 0xFF00)>>8)<<"xor_value "<status.reclainTankReachEnd){ setRunStatus(tr("回收槽未到底!!!!!!")); } else if(startPrintingFlag ){ if(printintFlag) 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){ if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { return; } 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); printintFlag = false; startPrintingFlag = false; updatePrintDisplayLabel(); sysPara->status. waitHightVolOff = 1; #ifndef __HV_FOR_WANG_DEBUG__ sysPara->status.waitHightVolOff = 3; #endif sysPara->saveParaToFile(); // 将相关配置保存 #ifdef RANDDEBUG 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("随机码文件导出完成."); } } #endif } } void MainWindow::on_pushButtonPausePrint_pressed() { if(sysPara){ #ifdef MIMA if(sysPara->status.WorkTimeOut && !SIMULATE_PRINTING_MODE) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP); return; } #endif if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { return; } sysPara->devOp->printCtrl(PRINT_CTRL_PAUSE); LogInfo::setRunStatusText(printintFlag?tr("暂停打印"):tr("继续打印")); ui->pushButtonStartPrint->setEnabled(true); printintFlag = !printintFlag; if(printintFlag) { 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(); // 将相关配置保存 #ifdef RANDDEBUG 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("随机码文件导出完成."); } } #endif } } 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); 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->status.canRunAirPushing = 0; 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); /*回收槽动作的时候务必关高压*/ //LogInfo::setRunStatusText(sysPara->devOp->isReclaimTankOpenEnable()?tr("打开回收槽"):tr("停止打开")); 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; } 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); #ifdef __AIR_RELEASE_OLD__ // 粘度泵跟随循环阀动作 sysPara->devOp->controlViscosityPump(true); #else sysPara->devOp->controlViscosityPump(false);//关粘度泵 #endif 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); //LogInfo::setRunStatusText(sysPara->devOp->isReclaimTankCloseEnable()?tr("关闭回收槽"):tr("停止关闭")); 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(); ////////关机时提高转速和回收泵压力,粘度泵和循环阀延迟15s打开时间///// quint16 gearPumpValue_backup = sysPara->para.gearPumpValue; int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;; if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) { sysPara->status.isPumpValveControledByHand = true; //停止自动 if(sysPara->para.gearPumpEnable ){ if(!sysPara->para.flagOfReclaimPumEnable){ sysPara->para.gearPumpValue = 420; 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); } sysPara->devOp->controlViscosityPump(true); sysPara->devOp->controlCycleValve(true); sysPara->devOp->controlInkValve(false); //关供墨 sysPara->devOp->controlInkValvePWM(false); //关供墨 if(!TEST_MODE){ for(int i=14;i>10;i--) { this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*5)); MySleep(5000); } } 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; // system("touch /home/plg/runFlag"); //表示是正常关机 sysPara->status.isPumpValveControledByHand = true; //停止自动 sysPara->devOp->controlViscosityPump(false); sysPara->devOp->controlCycleValve(false); if(!TEST_MODE){ for(int i=10;i>0;i--) { this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*5)); MySleep(5000); } } } system("touch /home/plg/runFlag"); //表示是正常关机 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(); // 关机前将相关配置保存 #ifdef SYS_LINUX #ifdef __STC_POWER__ sysPara->devOp->Heartbeat(0); //发送关机命令 MySleep(200); //QProcess process; //process.startDetached("poweroff"); //qApp->exit(0); #endif system("sync");//缓存同步 sleep(5); sysPara->devOp->powerOff(); QProcess process; process.startDetached("shutdown -h now"); //qDebug()<<"run shutdown -h now"; qApp->exit(0); //qDebug()<<"qApp->exit(0)"; #endif } } void MainWindow::on_pushButtonStart_pressed() { //QFont font; //font.setPointSize(30); // ui->pushButtonStart->setFont(font); 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)).toAscii().data())); system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toAscii().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; //system((char *)((QString("mkdir %1").arg(TESTDIR)).toAscii().data())); //system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toAscii().data())); //先备份UP* checkForPowerOff(); } } } } void MainWindow::on_pushButtonPowerOff_pressed() { _on_pushButtonPowerOff_pressed(true); } 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 && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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; } 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.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; sysPara->status.lastHighVoltageFault = false; 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(printintFlag) { //#ifdef __HV_FOR_WANG_DEBUG__ #if 0 int actHvAmp = sysPara->para.HighVoltageAmplitude; float tempHvAmp;// = sysPara->para.HighVoltageAmplitude * 1.73; if(sysPara->para.HighVoltageAmplitude == 0) { tempHvAmp = 0; } else if(sysPara->para.HighVoltageAmplitude == 1) { tempHvAmp = 63.5; } else { tempHvAmp = 63.5 + (sysPara->para.HighVoltageAmplitude - 1) * 0.51; } sysPara->para.HighVoltageAmplitude = (unsigned char)tempHvAmp; sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); sysPara->para.HighVoltageAmplitude = actHvAmp; #else sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); #endif if(sysPara->status.flagOfPressureFault){ sysPara->status.flagOfPressureFault = false; sysPara->status.isPumpValveControledByHand = false; sysPara->devOp->mainInkCtrl(); emit clearPressureFault(); } } } } void MainWindow::onModbusPrintReceivedContent(int num) { QTextEdit textEdit; QString str1 = QString::number(num)+"-"; if(str1.size()==2) str1 = " "+str1; QString str2 = ""; int len = str1.length(); for (int i = 0; i < len; i++) { str2[i] = str1[len-1-i]; } QString fileName = "/home/plg/doc/serif7dots.html"; textEdit.insertHtml(QString("" "%3 %6") .arg("SerifL").arg(5).arg(str1) .arg("SerifR").arg(5).arg(str2)); QTextDocumentWriter writer(fileName); if(!writer.write(textEdit.document())) LogInfo::setRunStatusText(tr("保存html文件失败!")); ui->textEditOption->onFileOpen(fileName,false); on_pushButtonStartPrint_pressed(); } 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){ 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; if(sysPara->para.alterPrint.enable){ sysPara->status.alterPrintCnt = 0; sysPara->para.AlterMode= 1; } } } } void MainWindow::on_bottonEditText_pressed() { //qDebug()<<"EditMode"<para.EditMode; if(sysPara->para.EditMode==TXTFILE){ bool MaxCol4000; if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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 && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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){ } else { // 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, QApplication::UnicodeUTF8)); } 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()); // qDebug()<<"right_str_html="<").arg(font_family).arg(font_size) .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); //str_html += QString::fromUtf8(sysPara->Get_JSON_DATA.PrintingContent); str_html += strContentPrint.toUtf8(); str_html += ""; #endif if(!sysPara->para.isRemoveDigitCode) { str_html += ""; // qDebug()<<"str_html="< 201289985295612398451182413082479asd asdasdasdasd

*/ 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 = ""; #if 1//宴令需要屏蔽 txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); txt_fomart += strContentPrint.toUtf8(); txt_fomart += ""; #endif //ui->textEditOption->textEdit->insertHtml(txt_fomart); //ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp"); //QString html = ""; 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; //QRcode string test // qDebug()<<"QRcode string test"; // ++cc; // QString text = "12345679801234567980123456798012345679801234567980"; // text+=QString::number(cc%100); // dlgqrcode->extSetText(text); // dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); 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() { 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 = ui->textEdit->toHtml(); 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; //qDebug()<print.ExpiryVar.type = type; sysPara->print.ExpiryVar.width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; sysPara->print.ExpiryVar.height = rx.cap(4).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); if(sysPara->print.ExpiryVar.startRowPos < 0) { sysPara->print.ExpiryVar.startRowPos = 0; } if(rx.cap(2).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) { //currDate //qDebug()<<"CurDateVar:"<print.CurDateVar[0].type == 0) { qDebug()<<"1st CurDateVar:"; currDate = &sysPara->print.CurDateVar[0]; searchIndex = 2; } else { qDebug()<<"2nd CurDateVar:"; currDate = &sysPara->print.CurDateVar[1]; searchIndex = 3; } currDate->type = type; currDate->width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; currDate->height = rx.cap(4).toInt(&ok); currDate->startRowPos = currDate->endRowPos-currDate->height; if(rx.cap(2).contains("875")) { //qDebug()<<"bold"; currDate->bold = 1; } else { //qDebug()<<"normal"; currDate->bold = 0; } #else sysPara->print.CurDateVar.type = type; sysPara->print.CurDateVar.width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; sysPara->print.CurDateVar.height = rx.cap(4).toInt(&ok); //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-sysPara->print.CurDateVar.height; sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); if(sysPara->print.CurDateVar.startRowPos < 0) { sysPara->print.CurDateVar.startRowPos = 0; } if(rx.cap(2).contains("875")) { //qDebug()<<"bold"; sysPara->print.CurDateVar.bold = 1; } else { //qDebug()<<"normal"; sysPara->print.CurDateVar.bold = 0; } #endif //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(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; currClass->height = rx.cap(4).toInt(&ok); currClass->startRowPos = currClass->endRowPos-currClass->height-1; if(rx.cap(2).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; // qDebug()<<"Mode==2"; if(sysPara->status.CurrDateVariNum == 0) { return; } #if 1 // EXPIRYVAR_t *currDateVar; // for (int i = 0; i <2; ++i) { // if (sysPara->print.CurDateVar[i].type) { // currDateVar = &sysPara->print.CurDateVar[i]; // currDateVar->year = curDate.year(); // currDateVar->month = curDate.month(); // currDateVar->day = curDate.day(); // } // } #else sysPara->print.CurDateVar.year = curDate.year(); sysPara->print.CurDateVar.month = curDate.month(); sysPara->print.CurDateVar.day = curDate.day(); #endif } else if(Mode==3) { p_var = &sysPara->print.ClassVari; qDebug()<<"Mode==3"; if(sysPara->status.classVariNum == 0) { return; } #if 1 // EXPIRYVAR_t *currDateVar; // for (int i = 0; i <2; ++i) { // if (sysPara->print.CurDateVar[i].type) { // currDateVar = &sysPara->print.CurDateVar[i]; // currDateVar->year = curDate.year(); // currDateVar->month = curDate.month(); // currDateVar->day = curDate.day(); // } // } #else sysPara->print.CurDateVar.year = curDate.year(); sysPara->print.CurDateVar.month = curDate.month(); sysPara->print.CurDateVar.day = curDate.day(); #endif } else return; //qDebug()<<"sysPara->status.ExpiryVarNum:"<status.ExpiryVarNum; //if(sysPara->status.ExpiryVarNum) { textEdit.clear(); height = p_var->height; width = p_var->width; //qDebug()<<"height"<para.ExpirySplitMode) // { // case 0: str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day());break; // case 1: str.sprintf("%04d/%02d/%02d",curDate.year(),curDate.month(),curDate.day());break; // case 2: str.sprintf("%04d%02d%02d",curDate.year(),curDate.month(),curDate.day());break; // case 3: str.sprintf("%04d年%02d月%02d日",curDate.year(),curDate.month(),curDate.day());break; // default:str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day());break; // } 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"); //dateFormat.insert(10,"x"); /*****轮班变量功能 start******/ /*00:00-08:00 08:00-16:00 16:00-00:00 */ QTime current_time =QTime::currentTime(); int hour = current_time.hour(); //qDebug()<<"current_hour="<para.ExpiryDay).toString(dateFormat.value(sysPara->print.ExpiryVar.splitMode)); } else if(Mode==2 ) { DateTime = QDateTime::currentDateTime().toString(dateFormat.value(p_var->splitMode)); std::cout<<"p_var splitModeP:"<(p_var->splitMode)<= 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******/ //qDebug()<<"splitMode:"<splitMode; //qDebug()<<"update DateTime:"<height); //qDebug()<<"height"<bold:"<bold; 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-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(400) .arg(DateTime) // .arg("x") ); //600表示加粗,400表示普通 } //qDebug()<bold?QFont::Bold:QFont::Normal); //QFontMetrics fontMetrics(font); //int charWidth = (fontMetrics.width("0123456789"))/10 ; //p_var->letterSpace = p_var->width/10/(sysPara->status.addSpace?2:1) - charWidth; //font.setLetterSpacing(QFont::AbsoluteSpacing,p_var->letterSpace); font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace ); textEdit.setFont(font); //textEdit.document()->setDocumentMargin(0); //qDebug()<para.ExpirySplitMode; int imgHeight = height + 12; bool MaxCol4000; if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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(); //qDebug()<<"/Expiry.bmp"; image.save("./Expiry.bmp"); #ifdef DEBUG4 image.save("./Expiry.bmp"); #endif 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) { //qDebug()<<"lastValidRow"<status.ExpiryVarNum:"<status.ExpiryVarNum; //qDebug()<<"GetData row:"<endRowPos<<" start:"<< p_var->startRowPos; //qDebug()<<"GetData col:"<startColPos<<" start:"<< p_var->width; 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; //纠正 //firstValidRow = 0; //int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); //unsigned char *dat = (unsigned char *)calloc(width,rowByteNum); #ifdef DEBUG4 QString s2; s2.sprintf ("firstValidRow:%d,lastValidRow:%d,rowByteNum:%d,width:%d ,rowDiff:%d\n\r",firstValidRow,lastValidRow,rowByteNum,width,rowDiff) ; qDebug()<startColPos; int hStart= p_var->startRowPos; //int i = 0 ; 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); //int currRow = k - firstValidRowDiff; if(((rgb >> 24)&0xff) > 0x80) { c |= (1 << (hStart%8)); //dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8)); //str+="#"; } else { //str+="-"; c &= ~(1 << (hStart%8)); } if(hStart%8==7) { dat[(wStart)*5+(hStart)/8]=c; c=dat[(wStart)*5+(hStart+1)/8]; } hStart++; } //str+="\n"; dat[(wStart)*5+(hStart)/8]=c; wStart++; //if(sysPara->status.addSpace ) wStart++; //&& sysPara->print.QRvars[varNum].type==0 } //qDebug()<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() { #if 1 pPicScene->clearSelection(); QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff);//填充白色 //image.save("./printScene.jpg");//图片 QPainter painter(&image); pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect()); //qDebug()<<"scene rect:"<itemsBoundingRect(); //image.save("./printSceneDone.jpg");//图片 #endif int coldot=0; if(sysPara){ bool MaxCol4000; if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1) MaxCol4000 = false; else MaxCol4000 = true; 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)); } //qDebug()<<"Preview:"; { 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; #ifdef SPACEFLAG sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace #else sysPara->status.currPrintCol = coldot; #endif #ifdef VARCOLOR #else #if 0 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*/ #else //QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff);//填充白色 //image.save("./printScene.jpg");//图片 QPainter painter(&image); QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight); pPicScene->render(&painter,QRectF(),validRectF); //qDebug()<<"items bound:"<itemsBoundingRect(); #endif #ifndef DEBUG1 //image.save("/opt/printImage.jpg"); #endif //image.save("./printImageScene.bmp");//图片 //image.save("./printImagenn.jpg");//图片 //ui->widgetPrintTextDisplay // int firstRow = maxPicHeight; int firstRow = 0; /*--------------------------------------------------------------------------*/ 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; //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 for(int j = 0; j < lastRow - firstRow; j++){ // Y for(int i = 0; i < coldot; i++){ // QRgb rgb = image.pixel(i,j + firstRow); if(rgb&0x80000000){ //判断alpha //if((rgb & 0xffffff) == 0xff0000) {j=40; break;} #ifdef MMVAR 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;//scene 每一行可能都包含变量 //qDebug()<<"VARr:"< 0)?(dat[MAX_PRINT_ROW_BYTE_NUM*(i - 1) + j/8] & (1 << (j%8))):0; int downPointValue = (j < (lastRow - firstRow - 1))?(image.pixel(i,j + firstRow + 1) != 0x00ffffff):0; if(!leftPointValue && !downPointValue){ //找左下脚的位置 if(sysPara->status.variNum < MAX_VARI_NUM){ sysPara->status.vars[sysPara->status.variNum].startColPos = i; sysPara->status.vars[sysPara->status.variNum].endRowPos = j; sysPara->status.variNum ++;TempVarNum++; } else TempVarNum++; } dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 } #endif else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){ // 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR) //qDebug()<<"FLAG:"<status.QRvariNum>=4)continue; if((rgb & 0x00ffff0) == 0x00ff10) { //MDT sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; if(varLastRowstatus.QRvariNum++; } else if((rgb & 0x00ffff0) == 0x00ff20) { //QR sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; if(varLastRowstatus.QRvariNum++; } else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0); sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1; if(varLastRowstatus.QRvariNum++; } 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) { if(sysPara->status.ExpiryVarNum <2) { sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0); sysPara->print.ExpiryVar.endRowPos = j; if(varLastRowstatus.ExpiryVarNum ++; i+=5; } //else TempVarNum++; //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 } } else if((rgb & 0xfffff0)==0xff0cf0) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 bool foundExVar=0; if(j>0){ QRgb r_rgb = image.pixel(i,j + firstRow+1); if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} } if(foundExVar) { if(sysPara->status.ExpiryVarNum <2) { sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0); sysPara->print.CurDateVar.endRowPos = j; if(varLastRowstatus.CurrDateVariNum ++; i+=5; } //else TempVarNum++; //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 } } else if((rgb & 0xffffff)==0xff00ff) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 { if(sysPara->status.classVariNum <3) { EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ; currCLass->day = QDateTime::currentDateTime().date().day(); currCLass->startColPos = i+(sysPara->status.addSpace?i:0); currCLass->endRowPos = j; if(varLastRowstatus.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; //qDebug()<<"y:"<status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 #else dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 #endif // if(j > sysPara->status.currPrintRow) // sysPara->status.currPrintRow = j; if((j+1) > sysPara->status.currPrintRow) { sysPara->status.currPrintRow = j+1; //qDebug()<<"dddd currPrintRow:"<< sysPara->status.currPrintRow; } } } }/*判断alpha end*/ } } // var //qDebug() <<"VarNum"<MAX_VARI_NUM){ setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); strTitle.append("\r\n"); strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); } #endif //qDebug()<status.vars[0].startRowPos<status.vars[0].endRowPos<< sysPara->status.currPrintRow; // ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM //qDebug()<<"qrvar"<status.QRvariNum; searchQrVar(); #if 1 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 int myvariNum=0; int expiryVarNum = 0; QList items = pPicScene->items(); foreach (QGraphicsItem *item, items) { PicTextItem *picText = qgraphicsitem_cast(item); //qDebug()<<"item position: "<< picText->pos(); //qDebug()<<"item bound: "<< picText->boundingRect(); //int varNum = 0; bool ok; int textvariNum=0; int textColdot=0; //textColdot = (int)picText->document()->size().width(); textColdot = picText->boundingRect().width(); //qDebug()<<"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; //int maxTextHeight = picText->document()->size().height(); if(maxTextHeight > MAX_PRINT_ROW_NUM + 12) { //maxTextHeight = MAX_PRINT_ROW_NUM + 12; } QSize textSize(textColdot, maxTextHeight); QImage textImage(textSize,QImage::Format_ARGB32); textImage.fill(0x00ffffff);//填充白色 //image.fill(0x00f0f000);//填充白色 QPainter textPainter(&textImage); //textImage.save("./textImage.jpg"); //QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,maxTextHeight); QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,picText->document()->size().height()); pPicScene->render(&textPainter,QRectF(),validtextRectF); //qDebug()<<"validtextRectF:"<pos().x() - pPicScene->itemsBoundingRect().x(); textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 for(int j = 0; j < textLastRow - textFirstRow; j++){ // Y for(int i = 0; i < textColdot; i++){ // QRgb rgb = textImage.pixel(i,j + textFirstRow); if((rgb&0x80000000)){ //判断alpha #ifdef MMVAR if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 bool textfoundvar = 0; if(j>0){ QRgb r_rgb = textImage.pixel(i,j + textFirstRow+1); if((r_rgb & 0xf0f0ff) != 0xf0f000 ) { textfoundvar =1; } } if(textfoundvar){ //qDebug()<<"general variable"; if(sysPara->status.variNum < MAX_VARI_NUM){ sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX; sysPara->status.vars[sysPara->status.variNum].endRowPos = j+textItemPosY; //qDebug()<<"sysPara->status.variNum:"<status.variNum; //qDebug()<<"startColPos:"<status.vars[sysPara->status.variNum].startColPos; //qDebug()<<"endRowPos:"<status.vars[sysPara->status.variNum].endRowPos; if(varLastRowstatus.variNum ++; textvariNum++; i+=5;//scene 每一行可能都包含变量 //qDebug()<<"VARr:"<itemAt(i,j+firstRow); //picText_var[i]= (PicTextItem*) gItem; //picText_var_hash.insert(picText_var[i],i); } else { textvariNum++; } } } #endif else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){ // 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR) //qDebug()<<"FLAG:"<status.QRvariNum>=4)continue; if((rgb & 0x00ffff0) == 0x00ff10) { //MDT sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX; sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY; if(varLastRowstatus.QRvariNum++; } else if((rgb & 0x00ffff0) == 0x00ff20) { //QR sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX; sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY; if(varLastRowstatus.QRvariNum++; } else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR; sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1; sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt; sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX; sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY; if(varLastRowstatus.QRvariNum++; } if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; } //else if((rgb & 0xfffff0)==0xff00f0) else if((rgb & 0x0000ffff)==EXPIRY_VARI_RECONISE) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 //qDebug()<<"found 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 <2) { //if(sysPara->print.ExpiryVar.endRowPos==0) if(sysPara->status.ExpiryVarNum == 0) { sysPara->status.ExpiryVarNum ++; } sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX; sysPara->print.ExpiryVar.endRowPos = j+textItemPosY; if(varLastRowprint.ExpiryVar.endRowPos:"<print.ExpiryVar.endRowPos; } //else TempVarNum++; //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 } } else if((rgb & 0xfffff0)==0xff0cf0) { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 bool foundExVar=0; if(j>0){ QRgb r_rgb = textImage.pixel(i,j + firstRow+1); if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} } if(foundExVar) { //qDebug()<<"found CurDateVar"; //if(sysPara->status.ExpiryVarNum <2) { //if(sysPara->print.CurDateVar.endRowPos==0) if(sysPara->status.CurrDateVariNum == 0) { sysPara->status.CurrDateVariNum ++; //setRunStatus(QString("CurrDateVariNum(%1)").arg(sysPara->status.CurrDateVariNum)); } sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX; sysPara->print.CurDateVar.endRowPos = j + textItemPosY; //qDebug()<<"CurDateVar ixj:"<print.CurDateVar.endRowPos:"<print.CurDateVar.endRowPos; if(varLastRow>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; //qDebug()<<"y:"<status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 #else dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 #endif } #endif } if(j > sysPara->status.currPrintRow) { sysPara->status.currPrintRow = j+textItemPosY; qDebug()<<"sysPara->status.currPrintRow:"<status.currPrintRow; } }/*判断alpha end*/ } } //qDebug()<<"ExpiryVarNum:"<status.ExpiryVarNum; //===================一般变量===================== //myvariNum = 0; QString textVariPattern = ""; QRegExp textrx(textVariPattern); QString textHtml = picText->toHtml(); int from = 0; //int myvariNum=0; while(from < textHtml.size() && from != -1){ from = textHtml.indexOf(textrx,from); if(from != -1){//找到匹配的 //qDebug()<<"found variable"; from ++; //if(myvariNum < textvariNum) if(myvariNum < sysPara->status.variNum) { sysPara->status.vars[myvariNum].digitalNum = textrx.cap(3).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);//第一个匹配 sysPara->status.vars[myvariNum].width = textrx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); sysPara->status.vars[myvariNum].height = textrx.cap(5).toInt(&ok); //qDebug()<<"myvariNum endRowPos:"<status.vars[myvariNum].endRowPos; //qDebug()<<"myvariNum height:"<status.vars[myvariNum].height; sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height+1; //sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height; //qDebug()<<"start row:"<status.vars[myvariNum].startRowPos; 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(5).toInt(&ok)-1; 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) { //qDebug()<<"RAND:"<status.vars[myvariNum].type<< sysPara->status.vars[myvariNum].digitalNum; sysPara->status.RandomDigitNum = sysPara->status.vars[myvariNum].digitalNum; } int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[myvariNum].height); //qDebug()<<"MainWindows"<status.vars[myvariNum].height<status.vars[myvariNum].letterSpace = 0; if(sysPara->status.vars[myvariNum].digitalNum){ //算出letterspace QFont font; //font.setFamily(Public::getFontFamily(pixelSize)); font.setFamily(Public::getFontFamily(pixelSize,sysPara->status.vars[myvariNum].type )); // 20160812 //pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0)); font.setPixelSize(pixelSize); font.setWeight(sysPara->status.vars[myvariNum].bold?QFont::Bold:QFont::Normal); //font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); QFontMetrics fontMetrics(font); int charWidth = (fontMetrics.width("0123456789"))/10 ; sysPara->status.vars[myvariNum].letterSpace = sysPara->para.textEditCharSpace; //sysPara->status.vars[myvariNum].letterSpace = //sysPara->status.vars[myvariNum].width/sysPara->status.vars[myvariNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth; } myvariNum++; } } } //==========================一般变量结束======================= //=========================有效期/生产日期变量 开始================== //qDebug()<<"sysPara->status.ExpiryVarNum"; if(sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum) { QString expiryPattern = ""; // 1 type ,2 name,3 width,4 height //

QRegExp expiryRx(expiryPattern); QString expiryHtml = picText->toHtml(); int from = 0; while(from < expiryHtml.size() && from != -1){ from = expiryHtml.indexOf(expiryRx,from); bool ok; //qDebug()<print.ExpiryVar.endRowPos:"<print.ExpiryVar.endRowPos; sysPara->print.ExpiryVar.type = type; sysPara->print.ExpiryVar.width = expiryRx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; sysPara->print.ExpiryVar.height = expiryRx.cap(4).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); qDebug()<<"endRow:"<print.ExpiryVar.endRowPos; qDebug()<<"startRow:"<print.ExpiryVar.startRowPos; qDebug()<<"height:"<print.ExpiryVar.height; if(expiryRx.cap(2).contains("875")) { //qDebug()<<"ExpiryVar:Bold"; sysPara->print.ExpiryVar.bold = 1; } else { //qDebug()<<"ExpiryVar:normal"; sysPara->print.ExpiryVar.bold = 0; } // 直接更新有效期,并退出? ExpiryDotUpdate(1); expiryVarNum++; } else if(type==CURDATE || type==CURDATE + 10 || type==CURDATE + 20) { //currDate //qDebug()<<"CurDateVar:"<print.CurDateVar.type = type; sysPara->print.CurDateVar.width = expiryRx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; sysPara->print.CurDateVar.height = expiryRx.cap(4).toInt(&ok); //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-sysPara->print.CurDateVar.height; sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; // 生产日期即当前日期 if(expiryRx.cap(2).contains("875")) { //qDebug()<<"CurDateVar:Bold"; sysPara->print.CurDateVar.bold = 1; } else { //qDebug()<<"CurDateVar:normal"; sysPara->print.CurDateVar.bold = 0; } ExpiryDotUpdate(2); expiryVarNum++; } } else break; } } } //=========================有效期/生产日期变量 结束================== } #endif //if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<status.vars[0].endRowPos ; /*--------------------------------------------------------------------------*/ generateCharRamData(); //qDebug()<<"1"<status.currPrintRow; /*---------------------------------------------------------------------------*/ //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; //配合賴工省点打印少行問题 //qDebug()<<"lastRow:"<status.currPrintRow; #endif } #ifdef SPACEFLAG //sysPara->status.currPrintCol #else #endif #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; } 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_76K: oscfreq = 76000; 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; } } } void MainWindow::UpdateDateTimeQRCode(QString strContent) { if(!printintFlag || !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