diff --git a/CounterVarSet.cpp b/CounterVarSet.cpp index 54ad40f..26beecc 100644 --- a/CounterVarSet.cpp +++ b/CounterVarSet.cpp @@ -204,6 +204,14 @@ void CounterVarSet::applyUIPara(){ sysPara->devOp->writeFpgaCalandar(0); + // unsigned int flags = 0; + // if(sysPara->status.cnt1CurrentValueInitDoneFlag) + // flags = 1 << 2; + + // if(sysPara->status.cnt2CurrentValueInitDoneFlag) + // flags |= 1 << 3; + + // sysPara->devOp->clearProductCnt(flags); } } @@ -228,6 +236,9 @@ void CounterVarSet::updateSysParaToUI(){ ui->eleCNT2IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x20)?1:0); // ui->radCNT2ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x20)?0:1); + + ui->checkBoxResetCnt1CurrValue->setChecked(false); + ui->checkBoxResetCnt2CurrValue->setChecked(false); } } diff --git a/DevOp.cpp b/DevOp.cpp index 91b906c..b6a0858 100644 --- a/DevOp.cpp +++ b/DevOp.cpp @@ -2562,8 +2562,8 @@ int DevOp::writeFpgaPrintPara(bool ignoreWarn){ } } else if(sysPara->status.build_dat.builTime == 73){ - writeDacValue2Fpga_No73(); if(sysPara->status.currVoltageVersion != sysPara->status.lastVoltageVersion){ + writeDacValue2Fpga_No73(); sysPara->status.lastVoltageVersion = sysPara->status.currVoltageVersion; } } @@ -3226,11 +3226,11 @@ void DevOp::writeFpgaCalandar(bool Enable){ step = 1; step = step < 0?(100000000 + step):step; sysPara->para.calandar_and_dat.cnt2Step = QString::number(step).toUInt(0,16); - + // 与vx5相反,调换过值位置,比如0:4改为4:0 sysPara->para.calandar_and_dat.cntCurrValueInitEnable = - (sysPara->status.cnt3CurrentValueInitDoneFlag?0:4)+ - (sysPara->status.cnt2CurrentValueInitDoneFlag?0:2) - + (sysPara->status.cnt1CurrentValueInitDoneFlag?0:1); + (sysPara->status.cnt3CurrentValueInitDoneFlag?4:0)+ + (sysPara->status.cnt2CurrentValueInitDoneFlag?2:0) + + (sysPara->status.cnt1CurrentValueInitDoneFlag?1:0); fpgaWr(WRITE_CALENDAR_DAT_ADDR,(unsigned char *)&sysPara->para.calandar_and_dat,sizeof(sysPara->para.calandar_and_dat)); @@ -3248,9 +3248,9 @@ void DevOp::writeFpgaCalandar(bool Enable){ sysPara->para.Counter4.cnt4CurrValue= QString::number(sysPara->para.cnt4CurrValue).toUInt(0,16); //计数器4当前值用于隐藏功能 fpgaWr(WRITE_COUNTER4_ADDR,(unsigned char *)&sysPara->para.Counter4,sizeof(sysPara->para.Counter4)); - sysPara->status.cnt3CurrentValueInitDoneFlag = true; - sysPara->status.cnt2CurrentValueInitDoneFlag = true; - sysPara->status.cnt1CurrentValueInitDoneFlag = true; + sysPara->status.cnt3CurrentValueInitDoneFlag = false; + sysPara->status.cnt2CurrentValueInitDoneFlag = false; + sysPara->status.cnt1CurrentValueInitDoneFlag = false; } unsigned char dataOfvariNum[1]; unsigned char dataOfreg_var_print_ctrl[8][8]; @@ -3644,7 +3644,7 @@ void DevOp::writeSyncAndDelayPrintCount(bool enb, uint32_t maxCount) buffer[3] = (maxCount >> 16) & 0xFF; buffer[4] = (maxCount >> 24) & 0xFF; - fpgaWr(MAX_REPEAT_COUNT_DELAY_SYNC, &buffer, sizeof(buffer)); + fpgaWr(MAX_REPEAT_COUNT_DELAY_SYNC, buffer, sizeof(buffer)); } void DevOp::resendSTM32Date(int cmd, int addr, unsigned char *dat, int len, int type) diff --git a/DialogSaveFile.cpp b/DialogSaveFile.cpp index 51225d8..b7a8890 100644 --- a/DialogSaveFile.cpp +++ b/DialogSaveFile.cpp @@ -32,7 +32,8 @@ DialogSaveFile::DialogSaveFile(QWidget *parent) : } -void DialogSaveFile::refreshListView(int mode){ +void DialogSaveFile::refreshListView(int mode) +{ QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; QDir dir(dirPath); diff --git a/DigitalInput.cpp b/DigitalInput.cpp index 35e8def..6357334 100644 --- a/DigitalInput.cpp +++ b/DigitalInput.cpp @@ -5,9 +5,10 @@ #include #include #include +#include DigitalInput::DigitalInput(MyInputMethod *myInputMethod,QWidget *parent) : - QWidget(parent,(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool|Qt::WindowDoesNotAcceptFocus|Qt::BypassWindowManagerHint)), + QWidget(parent,(Qt::FramelessWindowHint )), ui(new Ui::DigitalInput) { ui->setupUi(this); @@ -31,6 +32,14 @@ DigitalInput::DigitalInput(MyInputMethod *myInputMethod,QWidget *parent) : connect(ui->enterBtn, &QPushButton::clicked, this, &DigitalInput::onEnterPressed); connect(ui->clrBtn, &QPushButton::clicked, this, &DigitalInput::onClrPressed); + + // 所有键盘按钮不接收焦点,避免点击按钮时 traceEdit 丢失焦点 + QList btns = findChildren(); + for (QPushButton* btn : btns) { + btn->setFocusPolicy(Qt::NoFocus); + } + + ui->traceEdit->setFocusPolicy(Qt::StrongFocus); } DigitalInput::~DigitalInput() @@ -41,21 +50,52 @@ DigitalInput::~DigitalInput() void DigitalInput::onCharPressed(){ QPushButton * button = qobject_cast(sender()); - QString text = button->text(); - myInputMethod->sendString (text); + QString ch = button->text(); + + if (!m_currSpinBox) { + ui->traceEdit->insert(ch); + return; + } + + int cursorPos = ui->traceEdit->cursorPosition(); + QString currentText = ui->traceEdit->text(); + QString newText = currentText.left(cursorPos) + ch + currentText.mid(cursorPos); + + if (newText.isEmpty()) { + ui->traceEdit->insert(ch); + return; + } + + bool ok = false; + int value = newText.toInt(&ok); + if (!ok) { + ui->traceEdit->insert(ch); + return; + } + + int max = m_currSpinBox->maximum(); + if (value <= max) { + ui->traceEdit->insert(ch); + } } void DigitalInput::onKeyBackspacePressed(){ - if(m_currSpinBox && QString::number(m_currSpinBox->value()).size() == 1) { - ui->traceEdit->clear(); +// if(m_currSpinBox && QString::number(m_currSpinBox->value()).size() == 1) { +// ui->traceEdit->clear(); +// } + +// #ifndef Q_OS_WIN32 +// //QWSServer::sendKeyEvent(0,Qt::Key_Backspace,Qt::NoModifier,true,false); //锟斤拷系统锟斤拷锟酵硷拷锟斤拷锟铰硷拷 +// MyInputMethod::sendEvent(Qt::Key_Backspace,Qt::NoModifier); +// #endif + int cursorPos = ui->traceEdit->cursorPosition(); + if (cursorPos > 0) { + QString text = ui->traceEdit->text(); + text.remove(cursorPos - 1, 1); + ui->traceEdit->setText(text); + ui->traceEdit->setCursorPosition(cursorPos - 1); } - -#ifndef Q_OS_WIN32 -//QWSServer::sendKeyEvent(0,Qt::Key_Backspace,Qt::NoModifier,true,false); //锟斤拷系统锟斤拷锟酵硷拷锟斤拷锟铰硷拷 - MyInputMethod::sendEvent(Qt::Key_Backspace,Qt::NoModifier); -#endif - } void DigitalInput::onKeySelectAllPressed(){ @@ -85,16 +125,19 @@ void DigitalInput::onKeyDownPressed(){ void DigitalInput::onEnterPressed() { - if(m_currSpinBox) { - m_currSpinBox->clearFocus(); - } + hide(); } void DigitalInput::onClrPressed() { - if(m_currSpinBox) { - m_currSpinBox->setValue(std::min(m_currSpinBox->maximum(), std::max(m_currSpinBox->minimum(), 0))); - } + // if(m_currSpinBox) { + // m_currSpinBox->setValue(std::min(m_currSpinBox->maximum(), std::max(m_currSpinBox->minimum(), 0))); + // ui->traceEdit->setText(m_currSpinBox->value()); + // // ui->traceEdit->setFocus(); + // } + + ui->traceEdit->clear(); + ui->traceEdit->setFocus(); } void DigitalInput::showEvent(QShowEvent *event) @@ -104,15 +147,29 @@ void DigitalInput::showEvent(QShowEvent *event) QSpinBox* box = dynamic_cast(focusWidget); if(!box) { qWarning() << "focusWidget is not QSpinBox"; + m_currSpinBox = nullptr; return; } - - if(m_currSpinBox) { - disconnect(m_currSpinBox, QOverload::of(&QSpinBox::valueChanged), ui->traceEdit, &QLineEdit::setText); - } m_currSpinBox = box; ui->traceEdit->setText(box->text()); - connect(box, QOverload::of(&QSpinBox::valueChanged), ui->traceEdit, &QLineEdit::setText); + // focusWidget->clearFocus(); + ui->traceEdit->setFocus(); + + // connect(box, QOverload::of(&QSpinBox::valueChanged), ui->traceEdit, &QLineEdit::setText); qDebug() << "The traceEdit has connected to the QSpinBox: " << box->objectName(); } + +void DigitalInput::hideEvent(QHideEvent * event) +{ + QWidget::hideEvent(event); + + if(m_currSpinBox) { + int value = ui->traceEdit->text().toInt(); + int min = m_currSpinBox->minimum(); + int max = m_currSpinBox->maximum(); + value = qBound(min, value, max); + m_currSpinBox->setValue(value); + m_currSpinBox->clearFocus(); + } +} \ No newline at end of file diff --git a/DigitalInput.h b/DigitalInput.h index 4488c4e..2d6c864 100644 --- a/DigitalInput.h +++ b/DigitalInput.h @@ -29,6 +29,7 @@ private slots: protected: virtual void showEvent(QShowEvent* event) override; + void hideEvent(QHideEvent* event) override; private: Ui::DigitalInput *ui; diff --git a/DlgCanvasHeightEditor.cpp b/DlgCanvasHeightEditor.cpp new file mode 100644 index 0000000..61365f7 --- /dev/null +++ b/DlgCanvasHeightEditor.cpp @@ -0,0 +1,26 @@ +#include "DlgCanvasHeightEditor.h" +#include "ui_DlgCanvasHeightEditor.h" + +DlgCanvasHeightEditor::DlgCanvasHeightEditor(QWidget *parent) : + QDialog(parent), + ui(new Ui::DlgCanvasHeightEditor) +{ + ui->setupUi(this); +} + +DlgCanvasHeightEditor::~DlgCanvasHeightEditor() +{ + delete ui; +} + +void DlgCanvasHeightEditor::setCanvsHeight(unsigned h) +{ + ui->sbCanvasHeight->setValue(h); +} + +unsigned DlgCanvasHeightEditor::canvasHeight() const +{ + return ui->sbCanvasHeight->value(); +} + + diff --git a/DlgCanvasHeightEditor.h b/DlgCanvasHeightEditor.h new file mode 100644 index 0000000..6bf19b1 --- /dev/null +++ b/DlgCanvasHeightEditor.h @@ -0,0 +1,26 @@ +#ifndef DLGCANVASHEIGHTEDITOR_H +#define DLGCANVASHEIGHTEDITOR_H + +#include + +namespace Ui { +class DlgCanvasHeightEditor; +} + +class DlgCanvasHeightEditor : public QDialog +{ + Q_OBJECT + +public: + explicit DlgCanvasHeightEditor(QWidget *parent = nullptr); + ~DlgCanvasHeightEditor(); + + void setCanvsHeight(unsigned h); + + unsigned canvasHeight() const; + +private: + Ui::DlgCanvasHeightEditor *ui; +}; + +#endif // DLGCANVASHEIGHTEDITOR_H diff --git a/DlgCanvasHeightEditor.ui b/DlgCanvasHeightEditor.ui new file mode 100644 index 0000000..91f963e --- /dev/null +++ b/DlgCanvasHeightEditor.ui @@ -0,0 +1,172 @@ + + + DlgCanvasHeightEditor + + + + 0 + 0 + 340 + 226 + + + + 窗口点阵设置 + + + QPushButton#closeBtn, QPushButton#checkBtn{ + background-color: #E6F7FF; + border: 1px solid #87CEEB; + border-radius: 4px; + font-size: 24px; + color: #228B22; + } + QPushButton#closeBtn:hover,QPushButton#checkBtn:hover{ + background-color: #D1E9FF; + } + + QPushButton#closeBtn:pressed,QPushButton#checkBtn:pressed{ + background-color: #BAE7FF; + } + + QPushButton { + background-color: #5396C1; + color: #ffffff; + border: 1px solid #000000; + border-radius: 3px; + font-size: 18px; + font-weight:500; + width: 180px; + height: 90px; + } + + QPushButton:hover { + background-color: #5396C1; + } + + QPushButton:disabled { + background-color: #7C828E; + color: #606060; + border-color: #808080; + } + + + + + + 220 + 170 + 100 + 40 + + + + + 100 + 40 + + + + ✕ + + + + 80 + 80 + + + + + + + 100 + 170 + 101 + 40 + + + + + 100 + 40 + + + + ✓ + + + + + + 30 + 70 + 221 + 31 + + + + QAbstractSpinBox::NoButtons + + + 24 + + + 32 + + + 32 + + + + + + 30 + 30 + 211 + 31 + + + + 点阵高度 + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + + checkBtn + clicked() + DlgCanvasHeightEditor + accept() + + + 141 + 196 + + + 141 + 281 + + + + + closeBtn + clicked() + DlgCanvasHeightEditor + reject() + + + 275 + 189 + + + 297 + 304 + + + + + diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index ec56af4..a40c432 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -113,6 +113,29 @@ void InkJetPrinter::init() // TestPrintWidget::sendButtonClickedSignal(16) 转由 openDatetimeEditor 处理 connect(m_TestPrintWidget, &TestPrintWidget::sig_showEditDateTime, this, &InkJetPrinter::openDatetimeEditor); connect(m_TestPrintWidget, &TestPrintWidget::sig_updatePrintContent, this, &InkJetPrinter::slt_updatePrintContent); + + #ifndef FPGA_TEST + // 调入文件喷印时,主动重启打印 + connect(m_TestPrintWidget, &TestPrintWidget::sig_stopPrint, m_MainWidget, [this](){ + auto isPrinting = sysPara->status.isPrinting; + if(isPrinting) { + m_MainWidget->on_m_StopBtn_clicked(); + + QTimer::singleShot(500, [this](){ + + m_PrintSetting->applyPrintSettingsToSysPara(false); + + m_MainWidget->on_m_StartBtn_clicked(); + LogInfo::setRunStatusText("Restarting the print because the work file was switched."); + }); + } + else { + QTimer::singleShot(300, [this](){ + m_PrintSetting->applyPrintSettingsToSysPara(false); + }); + } + }); + #endif // 班时元素与编辑 连接 connect(m_TestPrintWidget, &TestPrintWidget::sig_showScheduleShiftsEditor, this, &InkJetPrinter::showScheduleShiftsEditor); @@ -985,7 +1008,8 @@ void InkJetPrinter::timerHandler(void){ } // byons: 时间类型图元更新 @2026年4月11日 - if (m_MainWidget->dateTimeItemsDotUpdate()) { + auto updateArea = m_MainWidget->variableItemsUpdate(); + if (!updateArea.isNull()) { // // 统计追踪更新频率 // static QElapsedTimer bnsTimer; // static int toogleCount = 0; @@ -997,7 +1021,7 @@ void InkJetPrinter::timerHandler(void){ // } if(sysPara->status.isPrinting) { - m_MainWidget->SendPrintDataToFpga(0, true); + m_MainWidget->SendPrintDataToFpga(0, updateArea.left(), updateArea.width()); } if(m_StackedWidget->currentWidget() == m_MainWidget) { @@ -1013,11 +1037,14 @@ void InkJetPrinter::timerHandler(void){ if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0) { if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){ - sysPara->status.selfCheckDone = true; + // sysPara->status.selfCheckDone = true; m_MainWidget->updatePrintDisplayLabel(); // sysPara->status.flagOfAbnormalStatus = true; qDebug()<<"打印过程中死机了!!!"; + + m_MainWidget->on_m_StopBtn_clicked(); } + if(!sysPara->status.selfCheckDone) { /*开机自检*/ @@ -1075,19 +1102,20 @@ void InkJetPrinter::timerHandler(void){ // 自检结束发送打印设置 qInfo() << "Self check done and send print para to FPGA"; - sysPara->devOp->setHighVoltageAmplitudetoSTM32(); - sysPara->devOp->writeFpgaCalandar(0); - sysPara->devOp->writeFpgaPrintPara(true); + // sysPara->devOp->setHighVoltageAmplitudetoSTM32(); + // sysPara->devOp->writeFpgaCalandar(0); + // sysPara->devOp->writeFpgaPrintPara(true); - #ifdef __RFID_CARD - // 刷卡判定 - if(sysPara->RFIDPara.inkCardTimeOut - || sysPara->RFIDPara.solventCardTimeOut - || sysPara->RFIDPara.needMaintenance) { - m_MainWidget->setReclaimOpenBtnStatus(false); - LogInfo::setRunStatusText(tr("Need maintenance.")); - } - #endif + // 自检完成后,关闭高电压,不知道为什么,有时候开机自检都有高压 + sysPara->devOp->highVoltageCtrl(0); + + // 自检完成后,写入一遍打印设置和内容,不然好像直接开始打印不行 + if(m_PrintSetting) + m_PrintSetting->applyPrintSettingsToSysPara(false); + + m_MainWidget->SendPrintDataToFpga(0); + + m_MainWidget->on_m_StopBtn_clicked(); if(sysPara->para.Reciclar) test_flag = 1; @@ -1172,7 +1200,8 @@ void InkJetPrinter::timerHandler(void){ #endif if(pulse_300ms){ - sysPara->devOp->readCalandarDat(); //务必读一下此数据 + sysPara->devOp->readCalandarDat(); //务必读一下此数据 + if(sysPara->status.RandomNum>0) sysPara->devOp->Read_RanddomFromFpga(); #ifdef COUNTER1_BY_GROUP /* 分段计米 */ @@ -1291,6 +1320,7 @@ void InkJetPrinter::timerHandler(void){ // warningHandler(3); // } // LogInfo::setRunStatusText(tr("处理警告:%1").arg(QDateTime::currentDateTime())); + handleWarnInk(); // 处理墨水警告 handleWarnSolvent(); // 处理溶剂警告 #endif @@ -1495,6 +1525,7 @@ void InkJetPrinter::getTestPrintWidgetButtonClickedSlot(int index) m_StackedWidget->setCurrentWidget(m_MainWidget); MySleep(200); m_MainWidget->onPreviewScene(); + m_MainWidget->SendPrintDataToFpga(0); break; } @@ -1852,6 +1883,13 @@ void InkJetPrinter::saveFPGACalandarAndDat(unsigned char *data){ for(int i=0;istatus.calandar_and_dat.cnt1CurrValue, 16); + bool ok; + sysPara->para.cnt1CurrValue = hexStr.toUInt(&ok, 10); + + hexStr = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue, 16); + sysPara->para.cnt2CurrValue = hexStr.toUInt(&ok, 10); } void InkJetPrinter::saveFPGACnt3CurrValue(unsigned char *data){ @@ -2454,7 +2492,6 @@ void InkJetPrinter::autoControlHeater(){ * 控制回收槽 * * */ - void InkJetPrinter::detectAndcontrolReclaimTank(){ sysPara->status.currReclaimTankPos =10*sysPara->status.curr_reclaimTankTime; sysPara->status.reclaimTankBlockedAppending =0; @@ -2471,6 +2508,7 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){ sysPara->devOp->controlReclaimTankOpen(false); } + m_MainWidget->stopFlashReclaimOpenBtn(); } else if(sysPara->status.reclaimTankstatus == 5 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 { @@ -2480,7 +2518,10 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){ m_MainWidget->setRunStatus(tr("回收槽到头")); m_MainWidget->setReclaimStatus(true, 100); m_MainWidget->enablePrintButton(true); //仅仅在此时能使能打印按钮 - sysPara->devOp->highVoltageCtrl(1); + // sysPara->devOp->highVoltageCtrl(1); + + m_MainWidget->stopFlashReclaimOpenBtn(); + // emit reclaimTankOpenDone(); /*回收槽开关时间校正*/ sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12; @@ -2494,13 +2535,21 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){ else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 { sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭 + m_MainWidget->stopFlashReclaimOpenBtn(); // ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); } else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 { auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f; int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100)); - m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate); + + // 不知道为什么会有rate为0,且 sysPara->status.reclaimTankstatus == 2 ,也就是 关的状态。 回收槽位置在0处,而状态却是 关 ,很奇怪 + if(sysPara->status.reclaimTankstatus != 2 && rate != 0) { + m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate); + } + + m_MainWidget->setReclaimOpenBtnStatus(sysPara->status.reclaimTankstatus == 2); + m_MainWidget->setReclaimCloseBtnStatus(sysPara->status.reclaimTankstatus == 1); sysPara->status.reclaimBlockedCnt = 0; } @@ -2509,14 +2558,13 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){ if(sysPara->devOp->isReclaimTankCloseEnable()) sysPara->devOp->controlReclaimTankClose(false); //到头,关闭 m_MainWidget->setReclaimStatus(false, 0); + m_MainWidget->stopFlashReclaimOpenBtn(); //sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零 // emit reclaimTankCloseDone(); sysPara->status.lastRecycleWarn = 0; sysPara->status.HVFaultCloseEn=0; sysPara->status.reclainCloseAppending=false; sysPara->status.canRunAirPushing = true; //下次开回收槽就执行排气程序 - - LogInfo::setRunStatusText("reclaimTankCloseDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos)); } else if(sysPara->status.reclaimTankstatus == 0x12 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 { @@ -2524,6 +2572,12 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){ LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); m_MainWidget->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); } + else if(sysPara->status.reclaimTankstatus == 4 ) + { + m_MainWidget->setReclaimOpenBtnStatus(true); + m_MainWidget->setReclaimCloseBtnStatus(true); + LogInfo::setRunStatusText("Reclaim tank hold on "+QString::number(sysPara->status.currReclaimTankPos)); + } } void InkJetPrinter::viscosity_timerHandler() @@ -2562,7 +2616,7 @@ void InkJetPrinter::rebootApp() sysPara->devOp->controlInkValve(false); sysPara->devOp->controlInkValvePWM(false); } - m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); + m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒......").arg(i)); MySleep(1000); } } @@ -2595,7 +2649,7 @@ void InkJetPrinter::rebootApp() { if(i==9) sysPara->devOp->controlReclaimTankOpen(false); - m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); + m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒......").arg(i)); MySleep(1000); } } @@ -2621,7 +2675,7 @@ void InkJetPrinter::rebootApp() sysPara->para.gearPumpValue = 0; sysPara->devOp->WriteMoterPump(); } - m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); + m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒......").arg(i)); MySleep(1000); } } @@ -2719,11 +2773,12 @@ void InkJetPrinter::warningHandler(int type){ if (!sysPara->RFIDPara.inkCardTimeOut) inkTime = 48- dateTimeDiff/60/60; } - if(sysPara->RFIDPara.inkCardTimeOut){ + if(sysPara->RFIDPara.inkCardTimeOut && flagOfWarning){ if(++sysPara->status.showInkWarningNumber >= INTERVAL_AFTER48H){ warningShow(CARD_TYPE::INK,49); sysPara->status.showInkWarningNumber = 0;//是否有必要保存? sysPara->saveRFIDPara(); + flagOfWarning = false; return; } } @@ -2736,18 +2791,21 @@ void InkJetPrinter::warningHandler(int type){ if (dateTimeDiff > 60*60*24*2) { sysPara->RFIDPara.solventCardTimeOut = true; } + if (!sysPara->RFIDPara.solventCardTimeOut) - solventTime = 48- dateTimeDiff/60/60; + solventTime = 48- dateTimeDiff / 60 / 60; } - if(sysPara->RFIDPara.solventCardTimeOut){ + if(sysPara->RFIDPara.solventCardTimeOut && flagOfWarning){ if(++sysPara->status.showSolventWarningNumber >= INTERVAL_AFTER48H){ warningShow(CARD_TYPE::SOLVENT,49); sysPara->status.showSolventWarningNumber = 0; sysPara->saveRFIDPara(); + flagOfWarning = false; return; } } + sysPara->saveRFIDPara(); } /***********处理保养到期提示start******************/ @@ -2856,6 +2914,7 @@ int InkJetPrinter::updateWarningTime(int type){ // 读取文件内容 QTextStream in(&file); QString starTime = in.readAll(); // 第一次提示的时间 + starTime = starTime.trimmed(); // 关闭文件 file.close(); inkWarnTime = QDateTime::fromString(starTime,"yyyy-MM-dd HH::mm::ss"); @@ -2873,6 +2932,7 @@ int InkJetPrinter::updateWarningTime(int type){ // 读取文件内容 QTextStream in(&file); QString starTime = in.readAll(); // 第一次提示的时间 + starTime = starTime.trimmed(); // 关闭文件 file.close(); solventWarnTime = QDateTime::fromString(starTime,"yyyy-MM-dd HH::mm::ss"); @@ -2968,7 +3028,6 @@ void InkJetPrinter::handleWarnInk() if(sysPara->status.inkWarningCnt >= DETECT_WARNING_TIME){ sysPara->para.flagOfInkWarning = true; - sysPara->RFIDPara.needInkCard = true; manager_rfid->setInkCardFirstPrompt(true); QString strCurDateTime = QDateTime::currentDateTime().toString("yyMMddhhmmss"); LogInfo::setRunStatusText("Ink warning."); @@ -3007,7 +3066,7 @@ void InkJetPrinter::handleWarnInk() QDateTime curDateTime = QDateTime::currentDateTime(); QByteArray curDateTimestr = curDateTime.toString("yyyy-MM-dd HH::mm::ss").toUtf8(); QFile file("/home/plg/inkRFIDTime.txt"); - if(!file.open(QIODevice::WriteOnly)){ + if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)){ qDebug()<<"Open inkRFIDTime Failure."; LogInfo::setRunStatusText("Open inkRFIDTime Failure."); } @@ -3046,7 +3105,6 @@ void InkJetPrinter::handleWarnSolvent() if(sysPara->status.solventWarningCnt >= DETECT_WARNING_TIME){ sysPara->para.flagOfSolventWarning = true; - sysPara->RFIDPara.needSolventCard = true; manager_rfid->setSolventCardFirstPrompt(true); QDateTime curDateTime = QDateTime::currentDateTime(); QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); @@ -3084,7 +3142,7 @@ void InkJetPrinter::handleWarnSolvent() QDateTime curDateTime = QDateTime::currentDateTime(); QByteArray curDateTimestr = curDateTime.toString("yyyy-MM-dd HH::mm::ss").toUtf8(); QFile file("/home/plg/solventRFIDTime.txt"); - if(!file.open(QIODevice::WriteOnly)){ + if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)){ qDebug()<<"Open solventRFIDTime Failure."; LogInfo::setRunStatusText("Open solventRFIDTime Failure."); } @@ -3113,8 +3171,24 @@ void InkJetPrinter::handleWarnSolvent() void InkJetPrinter::slt_showMsg(QString msg) { + static QList msgPool; + QMessageBox * msgBox = new QMessageBox(QMessageBox::NoIcon, tr("提示"), msg, QMessageBox::StandardButton::Ok); - connect(msgBox, &QMessageBox::finished, msgBox, &QMessageBox::deleteLater); + msgPool.push_back(msgBox); + connect(msgBox, &QMessageBox::finished, [this, msgBox, &msgPool](){ + auto idx = msgPool.lastIndexOf(msgBox); + if(idx != -1) { + msgPool.removeAt(idx); + } + + msgBox->deleteLater(); + }); + msgBox->show(); + + if(msgPool.size() > 3) { + msgPool.takeFirst()->deleteLater(); + } + LogInfo::setRunStatusText(msg); } diff --git a/MainInstruction.cpp b/MainInstruction.cpp index c1abc9a..dc17b8a 100644 --- a/MainInstruction.cpp +++ b/MainInstruction.cpp @@ -4,6 +4,7 @@ #include #include "DlgRFIDConfig.h" #include "runtimectrl.h" +#include "DlgCanvasHeightEditor.h" MainInstruction::MainInstruction(QWidget *parent) : QWidget(parent), @@ -26,6 +27,7 @@ MainInstruction::MainInstruction(QWidget *parent) : dlgInputAddr = new DlgInputAddr(parent); dialogAuthorization = new DialogAuthorization(parent); dlgRfidConfig = new DlgRFIDConfig(this); + dlgRfidConfig->setWindowTitle(tr("RFID Settings")); connect(dlgRfidConfig, &DlgRFIDConfig::accepted, this, &MainInstruction::onRFIDAutoConfirmTimeoutChanged); @@ -57,6 +59,17 @@ MainInstruction::MainInstruction(QWidget *parent) : connect(&timeDia,SIGNAL(accepted()),this,SLOT(slt_timeSetting())); ui->btn_network->hide(); + + dlgCanvasHeightEditor = new DlgCanvasHeightEditor(this); + dlgCanvasHeightEditor->setWindowModality(Qt::WindowModality::WindowModal); + connect(dlgCanvasHeightEditor, &QDialog::accepted, this, [this](){ + if(!sysPara) + return; + + sysPara->para.canvasHeight = dlgCanvasHeightEditor->canvasHeight(); + LogInfo::setRunStatusText(QString("Canvas Height: %1").arg(sysPara->para.canvasHeight)); + sysPara->saveParaToFile(); + }); } MainInstruction::~MainInstruction() @@ -251,7 +264,7 @@ void MainInstruction::slt_timeSetting() void MainInstruction::onRfidCfgBtnClicked() { dlgRfidConfig->setAutoConfirmTimeout(sysPara->para.rfidCountDown); - dlgRfidConfig->setWindowModality(Qt::WindowModal); + dlgRfidConfig->setWindowModality(Qt::WindowModality::WindowModal); dlgRfidConfig->show(); } @@ -262,6 +275,14 @@ void MainInstruction::onRFIDAutoConfirmTimeoutChanged() sysPara->saveRFIDPara(); } +void MainInstruction::onCanvasCfgBtnClicked() +{ + if(sysPara) + dlgCanvasHeightEditor->setCanvsHeight(sysPara->para.canvasHeight); + + dlgCanvasHeightEditor->show(); +} + void MainInstruction::applyStyleSheet() { QString styleSheet = diff --git a/MainInstruction.h b/MainInstruction.h index 15df646..9426be6 100644 --- a/MainInstruction.h +++ b/MainInstruction.h @@ -13,6 +13,7 @@ #include "TimeSettingDialog.h" class DlgRFIDConfig; +class DlgCanvasHeightEditor; namespace Ui { class MainInstruction; @@ -55,6 +56,8 @@ private slots: void onRFIDAutoConfirmTimeoutChanged(); + void onCanvasCfgBtnClicked(); + private: Ui::MainInstruction *ui; SysPara* sysPara = nullptr; @@ -65,6 +68,7 @@ private: DialogMaintenanceTimeSetting *MTimeSetting; DialogAuthorization *dialogAuthorization; DlgRFIDConfig *dlgRfidConfig = nullptr; + DlgCanvasHeightEditor* dlgCanvasHeightEditor = nullptr; // 时间设置 TimeSettingDialog timeDia; diff --git a/MainInstruction.ui b/MainInstruction.ui index c3c451b..263a6d0 100644 --- a/MainInstruction.ui +++ b/MainInstruction.ui @@ -98,7 +98,7 @@ - 1 + 2 @@ -291,13 +291,26 @@ 其他设置 + + + + 310 + 70 + 254 + 92 + + + + 窗口点阵设置 + + - 660 - 470 + 670 + 500 100 40 @@ -328,8 +341,8 @@ onGraphicsEditBtnClicked() - 230 - 196 + 232 + 195 -154 @@ -344,8 +357,8 @@ onRfidCfgBtnClicked() - 137 - 94 + 139 + 115 -182 @@ -353,9 +366,26 @@ + + canvaSizeCfgBtn + clicked() + MainInstruction + onCanvasCfgBtnClicked() + + + 491 + 139 + + + 956 + 250 + + + onGraphicsEditBtnClicked() onRfidCfgBtnClicked() + onCanvasCfgBtnClicked() diff --git a/MainWidget.ui b/MainWidget.ui index b2bb13b..dc900bc 100644 --- a/MainWidget.ui +++ b/MainWidget.ui @@ -217,7 +217,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; } 0 0 780 - 169 + 177 @@ -289,7 +289,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; } 200 - 0 + 130 @@ -473,7 +473,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; } 200 - 150 + 140 @@ -591,13 +591,13 @@ QScrollBar::add-line:horizontal { bottom: 0px; } - 200 + 214 0 - 200 + 214 140 @@ -629,6 +629,18 @@ QScrollBar::add-line:horizontal { bottom: 0px; } + + + 214 + 30 + + + + + 214 + 16777215 + + @@ -642,6 +654,12 @@ QScrollBar::add-line:horizontal { bottom: 0px; } + + + 156 + 0 + + 5 @@ -649,6 +667,9 @@ QScrollBar::add-line:horizontal { bottom: 0px; } 1 + + 0 + @@ -657,11 +678,14 @@ QScrollBar::add-line:horizontal { bottom: 0px; } 0 - + + + true + - 150 - 95 + 0 + 0 @@ -671,10 +695,40 @@ QScrollBar::add-line:horizontal { bottom: 0px; } - + QToolButton { + padding: 4px 16px; + border-radius: 6px; + font-size: 14px; + font-weight: 500; + color: #333333; /* 深灰文字,与蓝色图标协调 */ + + /* 中性色背景,略带渐变制造立体感 */ + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #eefaff, + stop: 1 #ceefff); + border: 1px solid #a1a1a1; + } + + QToolButton:hover { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #F5F7FA, + stop: 1 #E8EBF0); + border-color: #B0B6BE; + } + + QToolButton:pressed { + background-color: #D5D8DD; + border-color: #A8AEB6; + } + + QToolButton:disabled { + color: #A0A5AB; + background-color: #BCBFC4; + border: 1px solid #BCBFC4; + } - + 喷嘴开启 @@ -686,11 +740,8 @@ QScrollBar::add-line:horizontal { bottom: 0px; } 70 - - - 70 - 70 - + + Qt::ToolButtonIconOnly @@ -736,25 +787,64 @@ QScrollBar::add-line:horizontal { bottom: 0px; } 0 - - + + + + true + + + + 0 + 0 + + - 150 - 95 + 0 + 0 150 - 100 + 95 - + QToolButton { + padding: 4px 16px; + border-radius: 6px; + font-size: 14px; + font-weight: 500; + color: #333333; /* 深灰文字,与蓝色图标协调 */ + + /* 中性色背景,略带渐变制造立体感 */ + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #eefaff, + stop: 1 #ceefff); + border: 1px solid #a1a1a1; + } + + QToolButton:hover { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #F5F7FA, + stop: 1 #E8EBF0); + border-color: #B0B6BE; + } + + QToolButton:pressed { + background-color: #D5D8DD; + border-color: #A8AEB6; + } + + QToolButton:disabled { + color: #A0A5AB; + background-color: #BCBFC4; + border: 1px solid #BCBFC4; + } - + 喷嘴关闭 @@ -766,15 +856,12 @@ QScrollBar::add-line:horizontal { bottom: 0px; } 70 - - - 70 - 70 - + + Qt::ToolButtonIconOnly - + diff --git a/MyInputMethod.cpp b/MyInputMethod.cpp index 691b71f..008b60b 100644 --- a/MyInputMethod.cpp +++ b/MyInputMethod.cpp @@ -157,7 +157,7 @@ void MyInputMethod::updateHandler ( int type ){ break; case 2://QWSInputMethod::FocusOut: inputMethod->hide(); - digitalInput->hide(); + // digitalInput->hide(); inputMethod->onHiden(); break; } diff --git a/Printsetting.cpp b/Printsetting.cpp index 9260375..75f6eb4 100644 --- a/Printsetting.cpp +++ b/Printsetting.cpp @@ -223,7 +223,13 @@ void PrintSetting::TriggerupdateModelToUI() #endif ui->spinBoxEleEyeTriggerIntervalMs->setValue(m_model.triggerInterval); ui->spinBoxOutputPulseDelayMs->setValue(m_model.outputPulseDelayMs); - ui->spinBoxEleEyeTriggerRepeatCnt->setValue(m_model.eleEyeRepeatCnt); + + if(m_model.eleEyeRepeatCnt > INT32_MAX){ + ui->cb_unlimited->setChecked(true); + } + else { + ui->spinBoxEleEyeTriggerRepeatCnt->setValue(m_model.eleEyeRepeatCnt); + } ui->spinBoxSynTriggerPrintLen->setText(QString::number(m_model.triggerInterval)); ui->lineEditTriggerPulsePerMm->setText(QString::number((double)m_model.encoderPulsePerMm)); @@ -586,10 +592,10 @@ void PrintSetting::setEnableEleEyeSetting(bool flag){ ui->labelEleEyeTriggerIntervalMs->setEnabled(!(ui->radioButtonSynTriggerExternal->isChecked() && ui->eleEyeEdgetTriggerInner->isChecked())); // ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(!(ui->radioButtonSynTriggerExternal->isChecked() && ui->eleEyeEdgetTriggerInner->isChecked())); ui->spinBoxEleMaskTime->setEnabled(flag); - ui->spinBoxEleEyeTriggerRepeatCnt->setEnabled(flag); + ui->spinBoxEleEyeTriggerRepeatCnt->setEnabled(true); ui->radioButtonEleEyeEdgetTrigger->setEnabled(flag); ui->radioButtonEleEyeLevelTrigger->setEnabled(flag); - ui->cb_unlimited->setEnabled(flag); + ui->cb_unlimited->setEnabled(true); ui->spinBoxEleEyeTriggerPrintDelay->setEnabled(flag); if (!flag) ui->cb_unlimited->setChecked(false); } @@ -629,7 +635,7 @@ void PrintSetting::applyPrintSettingsToSysPara(bool showTip) PrintSettingModel::applyToSysPara(m_model, sysPara); if (sysPara->devOp) { - sysPara->devOp->writeFpgaPrintPara(false); + int res = sysPara->devOp->writeFpgaPrintPara(!showTip); sysPara->devOp->writeSyncAndDelayPrintCount( m_model.triggerMode == PRINT_TRIGGER_SYNCHRONIZER || m_model.triggerMode == PRINT_TRIGGER_TIME, @@ -640,7 +646,7 @@ void PrintSetting::applyPrintSettingsToSysPara(bool showTip) sysPara->devOp->writeFlightCompCtrl(ui->enbFlightCompCtrl->isChecked(), ui->enbAccelDecelPredict->isChecked(), quint32(ui->flightCompWindowCycles->value())); - if(sysPara->devOp->writeFpgaPrintPara(true) != -1 && showTip) { + if(res != -1 && showTip) { QMessageBox box(QMessageBox::Icon::Information, tr("提示"), tr("应用成功"), QMessageBox::Ok, nullptr); auto btn = box.button(QMessageBox::Ok); // btn->setFixedSize(80, 40); @@ -900,7 +906,6 @@ QString PrintSettingModel::toString(const PrintSettingModel &model) return str; } - PrintSettingModel PrintSettingModel::defPrintSettingModel() { QFile file(DEF_PRINT_SETTINGS_PATH); diff --git a/Printsetting.h b/Printsetting.h index 6deb30b..449f918 100644 --- a/Printsetting.h +++ b/Printsetting.h @@ -130,7 +130,6 @@ public: void setModel(const PrintSettingModel& model); void setDefaultSettingMode(bool enable); - private slots: void buttonClickedSlot(); @@ -184,4 +183,4 @@ signals: }; -#endif // PRINTSETTING_H \ No newline at end of file +#endif // PRINTSETTING_H diff --git a/Printsetting.ui b/Printsetting.ui index 5f1a9ec..73ebb5f 100644 --- a/Printsetting.ui +++ b/Printsetting.ui @@ -381,7 +381,7 @@ - 1 + 0 65535 @@ -428,10 +428,10 @@ - 1 + 0 - 253 + 2147483647 @@ -1502,5 +1502,21 @@ + + cb_unlimited + toggled(bool) + spinBoxEleEyeTriggerRepeatCnt + setDisabled(bool) + + + 634 + 191 + + + 451 + 191 + + + diff --git a/QtUI.pro b/QtUI.pro index 24e5318..10e99ac 100644 --- a/QtUI.pro +++ b/QtUI.pro @@ -180,7 +180,8 @@ HEADERS += Public.h \ Log/logglobal.h \ loginfoctrl.h \ runtimectrl.h \ - dump.h + dump.h \ + DlgCanvasHeightEditor.h FORMS += \ @@ -229,7 +230,8 @@ FORMS += \ scene/CounterEditor.ui \ scene/DlgBarcodeFormat.ui \ scene/DlgQrcodeFormat.ui \ - dlgQrCode.ui + dlgQrCode.ui \ + DlgCanvasHeightEditor.ui SOURCES +=\ mainwidget.cpp \ @@ -339,7 +341,8 @@ SOURCES +=\ Log/logger.cpp \ Log/logmessage.cpp \ loginfoctrl.cpp \ - runtimectrl.cpp + runtimectrl.cpp \ + DlgCanvasHeightEditor.cpp diff --git a/SysPara.cpp b/SysPara.cpp index 409a4fa..0846c73 100644 --- a/SysPara.cpp +++ b/SysPara.cpp @@ -106,6 +106,10 @@ void SysPara::loadParaFromFile(){ file.seek(0); file.read((char *)¶,(long long int)sizeof(para)); file.close(); + + // 韩国要求 画布大小可以设定在24 到 32 之间 + para.canvasHeight = qBound(unsigned(SCENE_MIN_HEIGHT), para.canvasHeight, unsigned(SCENE_MAX_HEIGHT)); + if(para.gearPumpSpeedAlarm < 1000 || para.gearPumpSpeedAlarm > 2000) para.gearPumpSpeedAlarm = 1500; @@ -181,6 +185,8 @@ void SysPara::loadDefaultPara(){ para.mixValveisNewVersion = 1;//混和阀是否是新管路 para.gearPumpSpeedAlarm = 1500; + + para.canvasHeight = 32; } void SysPara::saveParaToFile(){ @@ -1029,6 +1035,7 @@ void SysPara::saveRFIDPara() out << RFIDPara.cardInk; out << RFIDPara.cardSolvent; out << para.rfidCountDown; + out << status.showInkWarningNumber << status.showSolventWarningNumber; if(!file.flush()){ LogInfo::setRunStatusText("RFID Para save Failed 1"); @@ -1076,6 +1083,7 @@ bool SysPara::loadRFIDPara() in >> RFIDPara.cardInk; in >> RFIDPara.cardSolvent; in >> para.rfidCountDown; + in >> status.showInkWarningNumber >> status.showSolventWarningNumber; file.close(); return true; diff --git a/SysPara.h b/SysPara.h index a0511f9..78bad48 100644 --- a/SysPara.h +++ b/SysPara.h @@ -80,6 +80,9 @@ typedef enum { #define MAX_QVARI_NUM 4 #define MAX_CNT1_GROUPS_NUM 50 +#define SCENE_MAX_HEIGHT 32 +#define SCENE_MIN_HEIGHT 24 + typedef struct { unsigned int second:6; unsigned int minute:6; @@ -804,6 +807,7 @@ typedef struct { bool flagOfInkWarning; //报错累计次数达标,报警标志设为true bool flagOfSolventWarning; //报错累计次数达标,报警标志设为true unsigned short rfidCountDown; + unsigned int canvasHeight; // 韩国需求中,要求可以设定打印区域的高度,默认为32。 /* */ // 1108Bytes }sysPara_t; diff --git a/SystemManage.cpp b/SystemManage.cpp index 76e6b73..06ef4a7 100644 --- a/SystemManage.cpp +++ b/SystemManage.cpp @@ -1348,10 +1348,13 @@ void SystemManage::programFPGAProcess(){ emit sigToCloseSerialFPGA(); emit sigToCloseSerialSTM32(); //关闭定时器 - programFPGATimer->stop(); +// programFPGATimer->stop(); programFPGADialog->init(); programFPGADialog->show(); } + + programFPGATimer->stop(); + } void SystemManage::PowerOnSetTime(QString date){ diff --git a/SystemSetting.cpp b/SystemSetting.cpp index f2ecee9..641e8c7 100644 --- a/SystemSetting.cpp +++ b/SystemSetting.cpp @@ -18,8 +18,8 @@ int convertFreq(int index){ // qDebug()<<"index="<Qt::StrongFocus - 0 + 1 @@ -1509,5 +1509,21 @@ height: 25px; + + checkBoxResetCnt1CurrValue + toggled(bool) + spinBoxCnt1CurrValue + setDisabled(bool) + + + 335 + 198 + + + 453 + 198 + + + diff --git a/fileManage/FileManageWidget.cpp b/fileManage/FileManageWidget.cpp index 9fca997..2b07f5c 100644 --- a/fileManage/FileManageWidget.cpp +++ b/fileManage/FileManageWidget.cpp @@ -271,6 +271,12 @@ void FileManageWidget::copyFiles(QListWidget *from, QListWidget *to) for(auto item : items) { auto srcPath = item->data(AbsPathRole).toString(); auto destFilePath = destPath + QFileInfo(srcPath).fileName(); + + QFileInfo destFile(destFilePath); + if(destFile.exists()) { + QFile::remove(destFilePath); + } + bool ret = QFile::copy(srcPath, destFilePath); qInfo() << "Copy: " << srcPath << " -> " << destFilePath << ", result: " << ret; } diff --git a/mainwidget.cpp b/mainwidget.cpp index 4869512..7ea559e 100644 --- a/mainwidget.cpp +++ b/mainwidget.cpp @@ -97,6 +97,10 @@ MainWidget::MainWidget(QWidget* parent) scroller->grabGesture(ui.scrollArea->viewport(), QScroller::LeftMouseButtonGesture); connect(ui.btn_newFile, &QPushButton::clicked, this, &MainWidget::newFileAcquired); + + m_reclaimOpenBtnFlashTimer = new QTimer(this); + connect(m_reclaimOpenBtnFlashTimer, &QTimer::timeout, this, &MainWidget::onReclaimOpenBtnFlashTimerTimeout); + m_reclaimOpenBtnFlashTimer->setInterval(500); } MainWidget::~MainWidget() @@ -367,686 +371,11 @@ void MainWidget::powerOffConfirmed(){ qApp->exit(0); } -void MainWidget::PreviewPressed(){ - qDebug()<<"PreviewPressed"; -// qDebug()<toHtml(); - sysPara->para.EditMode = TXTFILE; - int coldot=0; - if(sysPara){ - previewFlag=1; - sysPara->status.currPrintRow = 0; - sysPara->status.variNum = 0; - sysPara->status.QRvariNum = 0; - sysPara->status.ExpiryVarNum=0; - unsigned char *dat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - memset(dat,0,sizeof(sysPara->status.printDat_Normal)); - }else{ - dat =sysPara->status.printDat; - memset(dat,0,sizeof(sysPara->status.printDat)); - } - -// qDebug()<<"Preview:"; - //////////////////////////////////////////////////////在这里清变量参数 - sysPara->status.ExpiryVarNum=0; - sysPara->status.CurrDateVariNum = 0; - sysPara->status.classVariNum = 0; - sysPara->print.ExpiryVar.startColPos = 0; - sysPara->print.ExpiryVar.endRowPos = 0; - sysPara->print.ExpiryVar.letterSpace =0; - sysPara->print.CurDateVar.startColPos = 0; - sysPara->print.CurDateVar.endRowPos = 0; - sysPara->print.CurDateVar.letterSpace = 0; - ///////////////////////////////////////////////////////////////// - if(sysPara->para.EditMode==PICFILE) - { - -// ui->PicWidgetDisp->getPrintDat (dat,0,sysPara); -// ui->PicWidgetDisp->readVar (sysPara,0); - - // qDebug ()<<"v-n1:"<status.variNum<<"v-nLeter1:"<status.vars[0].letterSpace<<"v-nLeter2:"<status.vars[1].letterSpace<<"v-nLeter3:"<status.vars[2].letterSpace; -// sysPara->status.variNum=ui->PicWidgetDisp->getVarNum (); -// sysPara->status.currPrintCol=ui->PicWidgetDisp->getWidth (); -// sysPara->status.currPrintRow=ui->PicWidgetDisp->getPicRealHeight(); - -// ui->PicWidgetDisp->getCharRamData(sysPara); - - //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)m_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"); - m_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 = m_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) - m_PrintDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); - else m_PrintDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); - - m_PrintDisplay->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)); - m_PrintDisplay->update(); - - //qDebug()<<"3"<status.currPrintRow; - } - previewFlag=0; - -} - - -void MainWidget::ontextEdittextChanged() -{ -// bool MaxCol4000; -// if(sysPara->status.flagOfNo67FPGA) -// MaxCol4000 = true; -// else -// MaxCol4000 = false; -// QSizeF size = ui->textEdit->document()->size(); -// sysPara->status.textEditTotalCol = size.width(); -// ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(size.height()).arg(size.width())); -// if(size.width() > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ -// myInputMethod->getInputMethod()->on_Key_Backspace_released(); -// MySleep(300); -// } -// if(size.width() == 0) -// { //在通过关标选择文本然后删除的时候,不会调用cursorPosition事件 -// onTextEditCursorPositionChanged(); -// } - -// if(0 10) -// { -// numOfTextChange = 0; -// emit autoUpdateFontWidthByMainWindow((const unsigned int)size.width()); -// } -} - - void MainWidget::setRunStatus(QString str){ ui.lb_nozzleState->setText(str); } -int MainWidget::searchQrVar(){ - int varNum = 0; - if( sysPara->status.QRvariNum){ - QString pattern = ""; - // 1 type ,2 name,3 width,4 height - //

< - // - QRegExp rx(pattern); - //QString textHtml = ui->textEdit->toHtml(); - ///////////// - QTextEdit textEdit ; - for(int i=0;istatus.QRvariNum;i++) - { - - if(sysPara->print.QRvars[i].type==0){ - textEdit.insertHtml(QString("") - .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - else if(sysPara->print.QRvars[i].type==1){ - textEdit.insertHtml(QString("") - .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - else if(sysPara->print.QRvars[i].type==2){ - textEdit.insertHtml(QString("") - .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - } - QString textHtml = textEdit.toHtml(); - //////////// - int from = 0; - // int xx =textHtml.size(); - while(from < textHtml.size() && from != -1){ - from = textHtml.indexOf(rx,from); - bool ok; - //qDebug()<=9 && (sysPara->print.QRvars[varNum].type ==type-9)) - { - //sysPara->print.QRvars[varNum].type = type-9; - sysPara->para.qrOption.type = type-9; - sysPara->para.qrOption.width=sysPara->print.QRvars[varNum].width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; - sysPara->para.qrOption.height =sysPara->print.QRvars[varNum].height = rx.cap(4).toInt(&ok); - sysPara->print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; - varNum++; - //break; - } - - } - } - } - } - return varNum; -} - -int MainWidget::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 = m_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) - { - 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-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; - } - //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 MainWidget::generateCharRamData() { @@ -1178,228 +507,18 @@ void MainWidget::generateCharRamData() } -void MainWidget::ExpiryDotUpdate(char Mode) -{ //更新有效期 - QTextEdit textEdit; - //textEdit.document()->setDocumentMargin(0); - textEdit.setLineWrapMode(QTextEdit::NoWrap); - int height,width; - //QDate curDate=QDate::currentDate(); - EXPIRYVAR_t *p_var;//=(Mode==1)?&sysPara->print.ExpiryVar:&sysPara->print.CurDateVar; - - if(sysPara->status.flagOfAdjustWidth_1){ - sysPara->print.ExpiryVar.splitMode = sysPara->status.splitMode_Adjust_1; - sysPara->status.flagOfAdjustWidth_1 = false; - } - if(sysPara->status.flagOfAdjustWidth_2){ - sysPara->print.CurDateVar.splitMode = sysPara->status.splitMode_Adjust_2; - sysPara->status.flagOfAdjustWidth_2 = false; - } - if(Mode==1) - { - qDebug()<<"Mode==1"; - if(sysPara->status.ExpiryVarNum == 0) { - return; - } - p_var = &sysPara->print.ExpiryVar; - QDate expiryDate=QDate::currentDate().addDays(sysPara->para.ExpiryDay); - sysPara->print.ExpiryVar.year = expiryDate.year(); - sysPara->print.ExpiryVar.month = expiryDate.month(); - sysPara->print.ExpiryVar.day = expiryDate.day(); - r_ExpiryDay = sysPara->para.ExpiryDay; - } - else if(Mode==2) - { - p_var = &sysPara->print.CurDateVar; - if(sysPara->status.CurrDateVariNum == 0) { - return; - } - } - else if(Mode==3) - { - p_var = &sysPara->print.ClassVari; - qDebug()<<"Mode==3"; - if(sysPara->status.classVariNum == 0) { - return; - } - } - else - return; - { - textEdit.clear(); - height = p_var->height; - width = p_var->width; - QString str; - QHash dateFormat; - dateFormat.insert(0,"yyyy-MM-dd"); - dateFormat.insert(1,"yyyy/MM/dd"); - dateFormat.insert(2,"yyyyMMdd"); - dateFormat.insert(3,"yyyy年MM月dd日"); - dateFormat.insert(4,"yyyy-MM-dd hh:mm"); - dateFormat.insert(5,"yyyy/MM/dd hh:mm"); - dateFormat.insert(6,"yyyyMMddhhmm"); - dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); - dateFormat.insert(8,"hh:mm"); - dateFormat.insert(9,"ddhhmm"); - dateFormat.insert(10,"dd MM yy"); - dateFormat.insert(11,"dd/MM/yy"); - dateFormat.insert(12,"dd/MM/yyyy"); - dateFormat.insert(13,"dd-MM-yy"); - dateFormat.insert(14,"dd-MM-yyyy"); - - /*****轮班变量功能 start******/ - /*00:00-08:00 - 08:00-16:00 - 16:00-00:00 - */ - QTime current_time =QTime::currentTime(); - int hour = current_time.hour(); - QString DateTime; - if(Mode==1) { - DateTime = QDateTime::currentDateTime().addDays(sysPara->para.ExpiryDay).toString(dateFormat.value(sysPara->print.ExpiryVar.splitMode)); - } - else if(Mode==2 ) { - DateTime = QDateTime::currentDateTime().toString(dateFormat.value(p_var->splitMode)); - } - else if (Mode == 3) { - if(hour >= 0 && hour <8) - { - dateFormat.insert(15,"A"); - DateTime = "A"; - } - else if(hour >= 8 && hour < 16) - { - dateFormat.insert(15,"B"); - DateTime = "B"; - } - else if(hour >= 16) - { - dateFormat.insert(15,"C"); - DateTime = "C"; - } - } - - /*****轮班变量功能 end******/ - int DPI = textEdit.logicalDpiX(); - DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 - if(p_var->bold) { - textEdit.insertHtml(QString("%4") - .arg(Public::getFontFamily(height-1,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 - .arg(height*72/DPI-1) - .arg(600) - .arg(DateTime) - ); //600表示加粗,400表示普通 - } - else { - textEdit.insertHtml(QString("%4") - .arg(Public::getFontFamily(height,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 - .arg(height*72/DPI) - .arg(400) - .arg(DateTime) - // .arg("x") - ); //600表示加粗,400表示普通 - } - - QFont font = textEdit.font(); - font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace ); - textEdit.setFont(font); - - int imgHeight = height + 12; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(imgHeight> MAX_PRINT_ROW_NUM+12) - imgHeight = MAX_PRINT_ROW_NUM+12; - if(width> (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - width = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; - QSize size(width+2,imgHeight); - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff); - QPainter painter(&image); - textEdit.show(); //如果不显示,似乎不会绘制 - textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ - textEdit.hide(); - image.save("./Expiry.bmp"); - - int lastValidRow = 0; - for(int k = imgHeight - 1; k >= 0 ; k--){ - for(int j = 0; j < width+1; j ++){ - QRgb rgb = image.pixel(j,k); - if(rgb&0xff000000){ - lastValidRow = k + 1; - break; - } - } - if(lastValidRow != 0) - { - break; - } - } - int rowDiff = p_var->endRowPos - p_var->startRowPos; - int firstValidRow=0; - int firstValidRowDiff; - if(lastValidRow >= rowDiff) - { - firstValidRow = lastValidRow - rowDiff; - firstValidRowDiff = firstValidRow; - } - else - { - firstValidRow = 0; - firstValidRowDiff = lastValidRow > rowDiff; - } - - firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正 - str="";//s2=""; - int wStart=p_var->startColPos; - int hStart= p_var->startRowPos; - unsigned char *dat; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - }else{ - dat =sysPara->status.printDat; - } - for(int j = 2; j < width+1; j ++) - { - unsigned char c=0; - hStart= p_var->startRowPos; - c=dat[(wStart)*5+(hStart)/8]; - for(int k = firstValidRow; k <= lastValidRow; k++) - { - QRgb rgb = image.pixel(j,k); - if(((rgb >> 24)&0xff) > 0x80) - { - c |= (1 << (hStart%8)); - } - else - { - c &= ~(1 << (hStart%8)); - } - if(hStart%8==7) { - dat[(wStart)*5+(hStart)/8]=c; - c=dat[(wStart)*5+(hStart+1)/8]; - } - hStart++; - } - dat[(wStart)*5+(hStart)/8]=c; - wStart++; - } - } -} - -bool MainWidget::dateTimeItemsDotUpdate() +QRect MainWidget::variableItemsUpdate() { if(!pPicScene) { - return false; + return QRect(); } int totalOfProcessedDots = 0; int totalOfDatetimeNumber = 0; int nbInvaliedDatetimePreview = 0; int nbClipDatetimePreview = 0; - bool isUpdate = false; + + QRect updateArea = {0, 0, 0, 0}; auto items = pPicScene->items(); for(auto i : items) { @@ -1416,7 +535,6 @@ bool MainWidget::dateTimeItemsDotUpdate() continue; auto b = dateTimeItem->updateDatetimeStr(); - isUpdate |= b; if(!b) continue; } @@ -1427,7 +545,6 @@ bool MainWidget::dateTimeItemsDotUpdate() continue; auto b = scheduleShiftItem->updateScheduleName(); - isUpdate |= b; if(!b) continue; } @@ -1440,7 +557,6 @@ bool MainWidget::dateTimeItemsDotUpdate() QVector counterValus{QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(), QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt()}; auto b = codeItem->updateVariants(counterValus); - isUpdate |= b; if(!b) continue; } @@ -1477,9 +593,11 @@ bool MainWidget::dateTimeItemsDotUpdate() } totalOfProcessedDots += imageToPrintData(img, (int)itemRect.left(), (int)itemRect.top()); + + updateArea = updateArea.united(itemRect); } - return isUpdate; + return updateArea; } int MainWidget::imageToPrintData(QImage &image, int startX, int startY) @@ -1535,6 +653,11 @@ void MainWidget::enablePrintButton(bool enable){ #ifdef QT_DEBUG enable = true; #endif + +#ifdef FPGA_TEST + enable = true; +#endif + m_StartBtn->setEnabled(enable); m_StopBtn->setEnabled(enable); } @@ -1628,12 +751,10 @@ void MainWidget::on_m_StartBtn_clicked() sysPara->status.FileChangeRestCntFlag=0; sysPara->saveParaToFile(); } - if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) - PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 - else if(sysPara->para.EditMode == SCENE) + + if(sysPara->para.EditMode == SCENE) onPreviewScene(); - 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 ; @@ -1735,16 +856,19 @@ void MainWidget::on_m_StopBtn_clicked() } unsigned char blankDat1[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]={0}; -void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate) +void MainWidget::SendPrintDataToFpga(unsigned char alterMode, int startCol, int size) { if(!sysPara) return ; // fileChange=false; - Q_UNUSED(alterEnable); + Q_UNUSED(alterMode); - if(!isUpdate) { + // 看清楚,最后取反,也就是说,如果不是局部更新,则写入打印设置和变量控制 + if(!(startCol >= 0 && size > 0 && size - startCol >= 1)) { sysPara->devOp->writeFpgaPrintPara(1); sysPara->devOp->writeFpgaVariCtrl(); + startCol = 0; + size = sysPara->status.currPrintCol; } sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址 @@ -1763,11 +887,14 @@ void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate) dat =sysPara->status.printDat; sizeofdat = sizeof(sysPara->status.printDat); } - if(sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM <= 20000) - sysPara->devOp->fpgaWr(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); - else - sysPara->devOp->fpgaWrD2(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); + dat = dat + startCol * MAX_PRINT_ROW_BYTE_NUM; + size = size * MAX_PRINT_ROW_BYTE_NUM; + + if(size <= 20000) + sysPara->devOp->fpgaWr(sizeof(blankDat1), dat, size); + else + sysPara->devOp->fpgaWrD2(sizeof(blankDat1), dat, size); static QElapsedTimer bnsTimer; static uint64_t nbRestartCount = 0; @@ -1798,6 +925,16 @@ int MainWidget::getCurrPrintStatus() void MainWidget::setReclaimOpenBtnStatus(bool enable) { + #ifdef __RFID_CARD + if(sysPara->RFIDPara.inkCardTimeOut + || sysPara->RFIDPara.solventCardTimeOut + || sysPara->RFIDPara.needMaintenance) { + enable = false; + } + #endif + + enable = !sysPara->status.airPushing && enable; + ui.m_RightBtn->setEnabled(enable); } @@ -1806,23 +943,46 @@ void MainWidget::setReclaimCloseBtnStatus(bool enable) ui.m_LeftBtn->setEnabled(enable); } +/** + * @brief 翻转回收槽开启按钮的背景颜色 + * 每次调用在 #BCBFC4 和 #FFD700 之间交替切换 + */ +void MainWidget::flashReclaimOpenBtn() +{ + m_reclaimFlashState = !m_reclaimFlashState; + ui.lb_RightBtn->setStyleSheet(m_reclaimFlashState ? "background-color:#FFD700;" : "background-color:#BCBFC4;"); +} + +void MainWidget::stopFlashReclaimOpenBtn() +{ + // 如果电机运行时间为0 就不暂停 + if (sysPara == nullptr + ||sysPara->status.curr_reclaimTankTime == 0 + ||sysPara->status.currReclaimTankPos == 0) + return; + + LogInfo::setRunStatusText("m_reclaimOpenBtnFlashTimer stop"); + m_reclaimOpenBtnFlashTimer->stop(); + m_reclaimFlashState = true; + flashReclaimOpenBtn(); +} + void MainWidget::setReclaimStatus(bool isOpen, int rate) { - // if (!sysPara->devOp->isReclaimTankOpenEnable()) { - // QString str = isOpen? tr("停止开启") : tr("停止关闭"); - // setRunStatus(str); - // return; - // }; - if (isOpen) { - QString str = rate == 100? tr("喷嘴已开启"):tr("喷嘴开启中"); - ui.lb_RightBtn->setText(str); + if (!sysPara->status.airPushing) { + QString str = rate == 100? tr("喷嘴已开启"):tr("喷嘴开启中"); + ui.lb_RightBtn->setText(str); + } ui.lb_LeftBtn->setText(tr("喷嘴关闭")); + } else { QString str = rate == 0? tr("喷嘴已关闭"):tr("喷嘴关闭中"); ui.lb_LeftBtn->setText(str); - ui.lb_RightBtn->setText(tr("喷嘴开启")); - // ui.lb_RightBtn->setStyleSheet("color: black;"); + + if (!sysPara->status.airPushing) { + ui.lb_RightBtn->setText(tr("喷嘴开启")); + } } } @@ -1834,7 +994,13 @@ void MainWidget::airPushingProcess() if(sysPara){ if (sysPara->status.airPushing) { // 执行排气 7 秒 - setRunStatus(tr("正在排气...")); + + QString labelTxt = tr("正在排气..."); + setRunStatus(labelTxt); + ui.lb_RightBtn->setText(labelTxt); + setReclaimOpenBtnStatus(false); + setReclaimCloseBtnStatus(false); + ++sysPara->status.airPushingOnTime; if(sysPara->status.airPushingOnTime >= 50) { static int delayCount = 0; @@ -1972,24 +1138,53 @@ void MainWidget::initSheet() ui.m_StopBtn->setStyleSheet(stopBtnSheet); - QString btnSheet = R"( - QPushButton:disabled { - background-color: #bdc3c7; /* 灰色背景 */ - color: #7f8c8d; /* 灰色文字 */ - border: 1px solid #95a5a6; /* 灰色边框 */ - } - )"; - ui.m_RightBtn->setStyleSheet(btnSheet); - ui.m_LeftBtn->setStyleSheet(btnSheet); + constexpr char* reclaimBtnNormalStyle = R"( + QToolButton { + padding: 16px 16px; + border-radius: 6px; + color: #333333; /* 深灰文字,与蓝色图标协调 */ - QString lbSheet = R"( - QLabel { - border: 1px solid #95a5a6; /* 灰色边框 */ - } - )"; - ui.lb_LeftBtn->setStyleSheet(lbSheet); - ui.lb_RightBtn->setStyleSheet(lbSheet); + /* 中性色背景,略带渐变制造立体感 */ + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #eefaff, + stop: 1 #ceefff); + border: 1px solid #a1a1a1; + } + QToolButton:hover { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #F5F7FA, + stop: 1 #E8EBF0); + border-color: #B0B6BE; + } + + QToolButton:pressed { + background-color: #D5D8DD; + border-color: #A8AEB6; + } + + QToolButton:disabled { + color: #A0A5AB; + background-color: #BCBFC4; + border: 1px solid #BCBFC4; + } + )"; + + + ui.m_RightBtn->setMinimumHeight(95); + ui.m_LeftBtn->setMinimumHeight(95); + ui.m_LeftBtn->setFixedHeight(95); + ui.m_RightBtn->setFixedHeight(95); + ui.m_RightBtn->setStyleSheet(reclaimBtnNormalStyle); + ui.m_LeftBtn->setStyleSheet(reclaimBtnNormalStyle); + + // QString lbSheet = R"( + // QLabel { + // border: 1px solid #95a5a6; /* 灰色边框 */ + // } + // )"; + // ui.lb_LeftBtn->setStyleSheet(lbSheet); + // ui.lb_RightBtn->setStyleSheet(lbSheet); } void MainWidget::changeHighLight(bool isStart) @@ -2039,7 +1234,8 @@ void MainWidget::on_m_RightBtn_clicked() { if(sysPara){ if (!sysPara->status.reclaimTankBlockedAppending) { - if (sysPara->status.canRunAirPushing && (sysPara->status.currReclaimTankPos == 0)) { //2019/10/24 当回收槽未在顶的位置,不需要排气 + if (sysPara->status.canRunAirPushing && + (sysPara->status.currReclaimTankPos == 0)) { //2019/10/24 当回收槽未在顶的位置,不需要排气 // Pos == 0 回收槽关闭的情况下才可以执行排气; 先执行排气后开回收槽 if (!sysPara->status.airPushing) { //排气:打印、暂停打印置灰 @@ -2064,8 +1260,9 @@ void MainWidget::on_m_RightBtn_clicked() airPushTimer->start(100); // 100ms } } - else + else { reclaimTanOpen(); + } } else if(sysPara->status.reclaimTankBlockedAppending) { sysPara->status.reclaimTankBlockedAppending = false; @@ -2078,6 +1275,14 @@ void MainWidget::on_m_RightBtn_clicked() // onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10); } } + + // 喷嘴开启中 + if (m_reclaimOpenBtnFlashTimer && !m_reclaimOpenBtnFlashTimer->isActive()){ + ui.lb_RightBtn->setText(tr("正在排气...")); + m_reclaimFlashState = true; + m_reclaimOpenBtnFlashTimer->start(); + LogInfo::setRunStatusText("m_reclaimOpenBtnFlashTimer start"); + } } } @@ -2112,6 +1317,8 @@ void MainWidget::on_m_LeftBtn_clicked() sysPara->status.reclaimBlockedCnt = 0; enablePrintButton(false); + + stopFlashReclaimOpenBtn(); } } @@ -2141,10 +1348,17 @@ void MainWidget::slt_setNum() void MainWidget::slt_clearCnt() { if (sysPara) { - sysPara->devOp->clearProductCnt(1);//当前产品计数器立即清零 + sysPara->devOp->clearProductCnt(3 | 0x10);// 重新计米 + ui.labelProductCnt->setText("0"); +// SendPrintDataToFpga(0); } } +void MainWidget::onReclaimOpenBtnFlashTimerTimeout() +{ + flashReclaimOpenBtn(); +} + static int oldSizeFpga = -1; static int oldsizeSTM32 = -1; static int reclaimTankDelay = 0; @@ -2482,8 +1696,8 @@ int MainWidget::calculateMaxSpeed(int backup) case CRYS_64K: oscfreq = 64000; break; - case CRYS_76K: - oscfreq = 76000; + case CRYS_83K: + oscfreq = 83000; break; case CRYS_96K: oscfreq = 96000; @@ -2569,7 +1783,9 @@ void MainWidget::onPreviewScene() { sysPara->para.EditMode = SCENE; pPicScene->clearSelection(); - QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); + + QRect sceneRect = pPicScene->itemsBoundingRect().toRect(); + QSize size = sceneRect.size(); if(size.isEmpty()) { //场景为空时,渲染空场景并刷新界面 @@ -2580,7 +1796,7 @@ void MainWidget::onPreviewScene() image.fill(0x00ffffff);//填充白色 //image.save("./printScene.jpg");//图片 QPainter painter(&image); - pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect()); + pPicScene->render(&painter,QRectF(), sceneRect); int coldot=0; if(sysPara){ @@ -2606,8 +1822,7 @@ void MainWidget::onPreviewScene() { sysPara->status.addSpace = sysPara->para.checkSpace; - coldot = (int)m_textEdit->document()->size().width(); - coldot = pPicScene->itemsBoundingRect().width(); + coldot = sceneRect.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; @@ -2619,7 +1834,7 @@ void MainWidget::onPreviewScene() QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff);//填充白色 QPainter painter(&image); - QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight); + QRectF validRectF(sceneRect.x(),sceneRect.y(),coldot,maxPicHeight); pPicScene->render(&painter,QRectF(),validRectF); int firstRow = 0; int lastRow = firstRow + MAX_PRINT_ROW_NUM; @@ -2627,7 +1842,7 @@ void MainWidget::onPreviewScene() int varLastRow=0; lastRow = (lastRow>maxPicHeight)?maxPicHeight:lastRow; - //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + // 接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 for(int j = 0; j < lastRow - firstRow; j++){ // Y for(int i = 0; i < coldot; i++){ // QRgb rgb = image.pixel(i,j + firstRow); @@ -2750,7 +1965,7 @@ void MainWidget::onPreviewScene() } 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; + 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) { @@ -2770,7 +1985,7 @@ void MainWidget::onPreviewScene() strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); } - searchQrVar(); + sysPara->status.variNum = 0; sysPara->status.ExpiryVarNum = 0; sysPara->print.ExpiryVar.startColPos = 0; @@ -2807,32 +2022,13 @@ void MainWidget::onPreviewScene() pPicScene->render(&textPainter,QRectF(),validtextRectF); //qDebug()<<"validtextRectF:"<pos().x() - pPicScene->itemsBoundingRect().x(); - textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); + textItemPosX = picText->pos().x() - sceneRect.x(); + textItemPosY = picText->pos().y() - sceneRect.y(); //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 for(int j = 0; j < textLastRow - textFirstRow; j++){ // Y @@ -2851,7 +2047,6 @@ void MainWidget::onPreviewScene() } 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; @@ -2975,9 +2170,9 @@ void MainWidget::onPreviewScene() //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 } } + if(j > sysPara->status.currPrintRow) { sysPara->status.currPrintRow = j+textItemPosY; -// qDebug()<<"sysPara->status.currPrintRow:"<status.currPrintRow; } }/*判断alpha end*/ } @@ -3041,7 +2236,6 @@ void MainWidget::onPreviewScene() sysPara->status.vars[myvariNum].startRowPos--; } } - } if(sysPara->status.vars[myvariNum].type == RANDOMNUM) @@ -3074,89 +2268,6 @@ void MainWidget::onPreviewScene() } } //==========================一般变量结束======================= - - //=========================有效期/生产日期变量 开始================== - //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; - } - } - } - //=========================有效期/生产日期变量 结束================== - } /*--------------------------------------------------------------------------*/ @@ -3200,19 +2311,16 @@ void MainWidget::onPreviewScene() qDebug() << "currPrintCol: " << sysPara->status.currPrintCol; LogInfo::setRunStatusText("currPrintCol: " + QString::number(sysPara->status.currPrintCol)); LogInfo::setRunStatusText("currPrintRow: " + QString::number(sysPara->status.currPrintRow)); - LogInfo::setRunStatusText(QString("Items bounding rect: {%1, %2}").arg(pPicScene->itemsBoundingRect().width()).arg(pPicScene->itemsBoundingRect().height())); + LogInfo::setRunStatusText(QString("Items bounding rect: {%1, %2}").arg(sceneRect.width()).arg(sceneRect.height())); - sysPara->status.currPrintRow = pPicScene->itemsBoundingRect().height(); - sysPara->status.currPrintCol = pPicScene->itemsBoundingRect().width(); + sysPara->status.currPrintRow = sceneRect.height(); + sysPara->status.currPrintCol = sceneRect.width(); auto rows = sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow; rows = std::max(rows, (m_PrintDisplay->parentWidget()->height() / m_PrintDisplay->currScaleRatio())); auto cols = sysPara->status.currPrintCol; cols = std::max(cols, (m_PrintDisplay->parentWidget()->width() / m_PrintDisplay->currScaleRatio())); m_PrintDisplay->setDisplaySize(cols, rows); -// ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); -// ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); -// ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); m_PrintDisplay->update(); } previewFlag=0; diff --git a/mainwidget.h b/mainwidget.h index 5e648ad..47316ea 100644 --- a/mainwidget.h +++ b/mainwidget.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -40,7 +41,6 @@ public: void bindTxTEdit(QTextEdit* textEdit); void bindPicScene(PicScene* pPicScene); - void PreviewPressed(); void onPreviewScene(); // 260420 hlp:场景为空时,渲染空场景并刷新界面 void handleEmptySize(); @@ -51,19 +51,15 @@ public: bool startPrintingFlag; bool pushButtonFlag; - - int searchQrVar(); - int searchExpiryVar();//检索有效期变量 - void ExpiryDotUpdate(char Mode); // 单独更新时间类图元 byons@2026年4月11日 /** * @brief 更新时间类图元到FPGA print 数据 - * @return true 有时间元素更新,false 无时间元素更新 + * @return 返回需要更新的区域 * @remark 判断返回值用于决定是否SendPrintDataToFpga */ - bool dateTimeItemsDotUpdate(); + QRect variableItemsUpdate(); /** * @brief 向FPGA print 数据缓冲区写入image @@ -85,6 +81,10 @@ public: // 回收槽关闭按钮状态设置 void setReclaimCloseBtnStatus(bool enable); + void flashReclaimOpenBtn(); + + void stopFlashReclaimOpenBtn(); + /** * @brief 设置回收槽开关状态 * @param isOpen true:开;false:关 @@ -108,7 +108,7 @@ public: QTimer *timerShowItem,*timerPowerOff; - void SendPrintDataToFpga(unsigned char alterMode, bool isUpdate = false); + void SendPrintDataToFpga(unsigned char alterMode, int startCols = -1, int size = -1); void updatePrintDisplayLabel(); @@ -137,8 +137,8 @@ private: QPushButton* m_StopBtn; QPushButton* m_StartBtn; QPushButton* m_ToolBtn; - QPushButton* m_RightBtn; - QPushButton* m_LeftBtn; + QToolButton* m_RightBtn; + QToolButton* m_LeftBtn; PrintTextDisplay* m_PrintDisplay; @@ -183,12 +183,15 @@ private: void initSheet(); + bool m_reclaimFlashState = false; + + QTimer* m_reclaimOpenBtnFlashTimer = nullptr; + // 高亮切换 void changeHighLight(bool isStart); private slots: void airPushingProcess(); void buttonClickedSlot(); - void ontextEdittextChanged(); void on_m_RightBtn_clicked(); @@ -200,6 +203,8 @@ private slots: void slt_clearCnt(); + void onReclaimOpenBtnFlashTimerTimeout(); + signals: void sendButtonClickedSignal(int index); void setDisableAll(); @@ -212,4 +217,4 @@ signals: void newFileAcquired(); }; -#endif // MainWidget_H +#endif // MainWidget_H \ No newline at end of file diff --git a/myinclude.h b/myinclude.h index 67e2683..e603d42 100644 --- a/myinclude.h +++ b/myinclude.h @@ -12,6 +12,7 @@ #define MYSAVEFILEDLG // 定义自己的保存文件对话框,解决系统对话框按键不弹起问题 #define LANINTERFACE_NAME "eth0" +// #define FPGA_TEST //#define __RFID_OLD //旧的加密算法 #define __RFID_CARD //刷卡功能 //#define __RFID_IND //允许印度进行二次加密的宏 @@ -28,7 +29,7 @@ enum CRYS_FREQ{ CRYS_64K, - CRYS_76K, + CRYS_83K, CRYS_96K, CRYS_128K }; diff --git a/rfid/rfidmanager.cpp b/rfid/rfidmanager.cpp index e4f9598..dfab28a 100644 --- a/rfid/rfidmanager.cpp +++ b/rfid/rfidmanager.cpp @@ -65,7 +65,7 @@ void RFIDManager::MySleep(unsigned int msec, int expSize) // recResponse = comForRFID->read(8); break; } - QCoreApplication::processEvents(QEventLoop::AllEvents, 10); + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } } @@ -1144,6 +1144,10 @@ bool RFIDManager::waitStatus() sysPara->para.inkWarnTime = 0; sysPara->para.flagOfInkWarning = false; sysPara->saveParaToFile(); + + QDir dir("/home/plg"); + dir.remove("inkRFIDTime.txt"); + res = true; } } else if (status.addedSolvent && status.cardSolvent) { @@ -1157,6 +1161,9 @@ bool RFIDManager::waitStatus() sysPara->para.solventWarnDate = 0; sysPara->para.solventWarnTime = 0; sysPara->saveParaToFile(); + + QDir dir("/home/plg"); + dir.remove("solventRFIDTime.txt"); } res = true; } @@ -1241,10 +1248,6 @@ void RFIDManager::slt_intervalTimerHandle() emit sig_showMsg(tr("请及时刷溶剂卡")); status.firstPromptSolventCard = false; } - - // if(!sysPara->RFIDPara.cardInk) { - // QMessageBox::information(nullptr, tr("提示"), tr("请及时刷溶剂卡.")); - // } //不需要通知先后,成功即可 if (waitStatus()) { diff --git a/scene/BarcodeEditor.cpp b/scene/BarcodeEditor.cpp index 3781e83..1a8cdea 100644 --- a/scene/BarcodeEditor.cpp +++ b/scene/BarcodeEditor.cpp @@ -59,6 +59,11 @@ BarcodeEditor::BarcodeEditor(QWidget *parent) : connect(&m_barcodeFormatEditor, &DlgBarcodeFormat::accepted, this, &BarcodeEditor::onBarcodeFormatConfirmed); connect(&m_qrcodeFormatEditor, &DlgQrcodeFormat::accepted, this, &BarcodeEditor::onQrcodeFormatConfirmed); + + m_barcodeFormatEditor.setWindowModality(Qt::WindowModality::WindowModal); + m_qrcodeFormatEditor.setWindowModality(Qt::WindowModality::WindowModal); + m_barcodeFormatEditor.setWindowTitle(tr("BarCode Format")); + m_qrcodeFormatEditor.setWindowTitle(tr("Qrcode Format")); } BarcodeEditor::~BarcodeEditor() diff --git a/scene/ItemCommon.cpp b/scene/ItemCommon.cpp index 6770244..b80ff2a 100644 --- a/scene/ItemCommon.cpp +++ b/scene/ItemCommon.cpp @@ -55,8 +55,8 @@ static QImage renderDataMatrix(const unsigned char *grid, int cols, int rows, in return QImage(); } - int width = cols * moduleSize; - int height = rows * moduleSize; + int width = rows * moduleSize; + int height = cols * moduleSize; QImage image(width, height, QImage::Format_ARGB32); image.fill(background); @@ -64,8 +64,8 @@ static QImage renderDataMatrix(const unsigned char *grid, int cols, int rows, in for (int x = 0; x < cols; ++x) { bool bit = (grid[y * cols + x] & 0x01) != 0; QRgb color = bit ? foreground : background; - int px = x * moduleSize; - int py = y * moduleSize; + int px = y * moduleSize; + int py = (cols - 1 - x) * moduleSize; for (int dy = 0; dy < moduleSize; ++dy) { for (int dx = 0; dx < moduleSize; ++dx) { image.setPixel(px + dx, py + dy, color); @@ -573,6 +573,8 @@ QImage ItemUtils::txtToImage(const QString &txt, const QFont &font, const QColor painter.drawText(img.rect(), txt); painter.end(); + return img; + // 按背景色裁剪,使输出图像紧贴文字像素的最小包围盒(详见函数注释) return clipTxtImage(img, bgRgb); -} +} \ No newline at end of file diff --git a/scene/pictextitem.cpp b/scene/pictextitem.cpp index 4db8545..c4e1808 100644 --- a/scene/pictextitem.cpp +++ b/scene/pictextitem.cpp @@ -5,6 +5,7 @@ #include //#include "moveinput.h" #include +#include "ItemCommon.h" //extern MoveInput* moveInput; PicTextItem::PicTextItem(QGraphicsItem *parent, QGraphicsScene *scene, const SourceType t) : @@ -38,54 +39,6 @@ QVariant PicTextItem::source() return m_source; } -QImage clipImage(QImage img, const QRgb bg) -{ - QRect clipRect; - for(int x = 0; x < img.width(); ++x) { - for(int y = 0; y < img.height(); ++y) { - auto rgb = img.pixel(x, y); - if(rgb != bg) { - clipRect.setLeft(x); - goto top; - } - } - } - - top: - for(int y = 0; y < img.height(); ++y) { - for(int x = 0; x < img.width(); ++x) { - if(img.pixel(x, y) != bg) { - clipRect.setTop(y); - goto right; - } - } - } - - right: - for(int x = img.width() - 1; x >= 0; --x) { - for(int y = 0; y < img.height(); ++y) { - if(img.pixel(x, y) != bg) { - clipRect.setRight(x + 1); - goto bottom; - } - } - } - - bottom: - for(int y = img.height() - 1; y >= 0; --y) { - for(int x = 0; x < img.width(); ++x) { - if(img.pixel(x, y) != bg) { - clipRect.setBottom(y + 1); - goto end; - } - } - } - - end: - QRect originRect = img.rect(); - return img.copy(clipRect); -} - QImage PicTextItem::applyImgeTranslation(QImage img) { auto scaledWidth = boldMultiple() * img.width(); @@ -212,7 +165,7 @@ QRectF PicTextItem::boundingRect() const if(sourceType() == SourceType::UNKNOWN) return QGraphicsTextItem::boundingRect(); - const QRectF fr(0, 0, m_itemImage.width(), m_itemImage.height()); + QRectF fr(0, 0, m_itemImage.width(), m_itemImage.height()); return fr; } @@ -437,21 +390,10 @@ QImage PicTextItem::strToImage(const QString &str) if(str.isEmpty()) return QImage(); - QPainter painter; - QFontMetrics fm(font()); - QImage img(fm.horizontalAdvance(str), fm.height(), QImage::Format_ARGB32); + QColor txtColor = colorReversal() ? QColor(255, 255, 255) : QColor(0, 0, 0); + QColor bgColor = colorReversal() ? QColor(0, 0, 0) : QColor(0, 0, 0, 0); - QRgb txtColor = colorReversal() ? 0xffffffff : 0xff000000; - QRgb bgColor = colorReversal() ? 0xff000000 : 0x00000000; - - img.fill(bgColor); - painter.begin(&img); - painter.setFont(font()); - painter.setPen(txtColor); - painter.drawText(img.rect(), str); - painter.end(); - - return clipImage(img, bgColor); + return ItemUtils::txtToImage(str, font(), txtColor, bgColor); } /** diff --git a/systemsetting.ui b/systemsetting.ui index d403533..62946a4 100644 --- a/systemsetting.ui +++ b/systemsetting.ui @@ -194,7 +194,7 @@ - 76K + 83K diff --git a/testprintwidget.cpp b/testprintwidget.cpp index b9dae20..6f82104 100644 --- a/testprintwidget.cpp +++ b/testprintwidget.cpp @@ -69,16 +69,16 @@ TestPrintWidget::TestPrintWidget(QWidget* parent) pPicScene = new PicScene(this); //edit@12-09 - pPicScene->setSceneRect(QRectF(0,0, 3999, 32)); + pPicScene->setSceneRect(QRectF(0,0, 3999, SCENE_MAX_HEIGHT)); ui.graphicsView->setScene(pPicScene); ui.graphicsView->centerOn(0,0); // ui->senceEditOption->bindScene(pPicScene, ui->graphicsView, ui->textEdit); this->pPicScene->setIsdrawBackground(true); // 哪个天才写的?拿view和scene计算一下会死吗? - for(int i=0;i<3;i++){ - on_enlargeButton_pressed(); - } + // for(int i=0;i<3;i++){ + // on_enlargeButton_pressed(); + // } connect(pPicScene,&PicScene::selectionChanged,this,[=]() { getShowSelectItemText(); @@ -178,7 +178,7 @@ TestPrintWidget::TestPrintWidget(QWidget* parent) if (ret == QMessageBox::Ok){ disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); - connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool)), Qt::DirectConnection); dialogSaveFile->saveLastWork(); emit sig_updatePrintContent(); } else { @@ -400,7 +400,7 @@ void TestPrintWidget::on_saveButton_pressed() qDebug()<<"xml file null"; #ifdef MYSAVEFILEDLG disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); - connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool)), Qt::DirectConnection); dialogSaveFile->refreshListView(editMode); dialogSaveFile->show(); dialogSaveFile->setEnterFileName(""); @@ -492,7 +492,7 @@ void TestPrintWidget::onSaveASFile(QString filename,bool Flag){// use for dialog saveFile(); if(sysPara){ - sysPara->sysFile =xmlfileName; + sysPara->sysFile = xmlfileName; snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toLatin1().constData()); } //snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toLatin1().constData()); @@ -609,6 +609,19 @@ void TestPrintWidget::onFileOpen(QString filePath,bool reviewFlag){ } } } + // 主动暂停打印 + if(reviewFlag) { + emit sig_stopPrint(); + + // xmlfileName 会被 saveLastWork 更改,因此此处暂存变量, 在执行后恢复 + qDebug() << "xmlfileName:" << xmlfileName; + auto filename = xmlfileName; + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool)), Qt::DirectConnection); + dialogSaveFile->saveLastWork(); + xmlfileName = filename; + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + } emit sendButtonClickedSignal(20); //打开文件完成跳转到主窗口 } @@ -1062,6 +1075,26 @@ bool TestPrintWidget::eventFilter(QObject *watched, QEvent *event) { return QWidget::eventFilter(watched, event); } +void TestPrintWidget::showEvent(QShowEvent *event) +{ + QWidget::showEvent(event); + + pPicScene->update(); + auto sceneRect = pPicScene->sceneRect(); + // qreal sceneHeight = boundingRect.height() > (qreal)(sysPara->para.canvasHeight) ? SCENE_MAX_HEIGHT : (qreal)(sysPara->para.canvasHeight); + qreal sceneHeight = qMin(qreal(SCENE_MAX_HEIGHT), (qreal)(sysPara->para.canvasHeight)); + sceneRect.setHeight(sceneHeight); + pPicScene->setSceneRect(sceneRect); + + // 以高度为基准 最大化显示场景到 视口 + auto viewportHeight = pViewer->viewport()->height(); + QTransform transform = pViewer->transform(); + auto targetScale = viewportHeight / sceneRect.height(); + double currentScale = transform.m11(); + double relativeScale = targetScale / currentScale; + pViewer->scale(relativeScale, relativeScale); +} + void TestPrintWidget::onBtn3DClicked() { #if defined(ARCH_AARCH64) diff --git a/testprintwidget.h b/testprintwidget.h index caf6813..002cbcb 100644 --- a/testprintwidget.h +++ b/testprintwidget.h @@ -84,9 +84,7 @@ public: bool addItemFlag; // QString getReplateAfterStr(QString); -// QMap varReplaceItemMap; - QMap varReplaceItemMap; public slots: void on_enlargeButton_pressed(); void on_addButton_pressed(const SourceType type = SourceType::UNKNOWN); @@ -112,6 +110,8 @@ protected: // 重写事件过滤器 bool eventFilter(QObject *watched, QEvent *event) override; + void showEvent(QShowEvent* event) override; + private slots: void onSceneFocusedItemPosChanged(QPoint p); void onBtn3DClicked(); @@ -214,6 +214,7 @@ private: void selectItemByDirection(bool forward); signals: + void sig_stopPrint(); void sendButtonClickedSignal(int index); void sendUpdateFontSignl(int);