From 7c25953cefa7280b0f2e044c4934cd31bafd6f48 Mon Sep 17 00:00:00 2001 From: Byons Date: Fri, 26 Jun 2026 15:29:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=BD=E7=A6=BBprintsettings=E5=89=8D?= =?UTF-8?q?=E7=9A=84=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DialogFileOperation.cpp | 2 +- InkJetPrinter.cpp | 3 + Printsetting.cpp | 220 +++++++++++++++++++++++++++++++---- Printsetting.h | 86 +++++++++++++- Printsetting.ui | 252 ++++++++++++++++++++++------------------ testprintwidget.cpp | 62 ++++++++-- testprintwidget.h | 8 +- 7 files changed, 478 insertions(+), 155 deletions(-) diff --git a/DialogFileOperation.cpp b/DialogFileOperation.cpp index 76efffd..827f36d 100644 --- a/DialogFileOperation.cpp +++ b/DialogFileOperation.cpp @@ -261,7 +261,7 @@ void DialogFileOperation::on_pushButtonOpen_clicked() QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; QString filePath = dirPath + index.data().toString(); - emit openFile(filePath,false); + emit openFile(filePath,true); hide(); } diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index 18a73eb..0a1b98b 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -100,6 +100,9 @@ void InkJetPrinter::init() msgtest->setWindowTitle(tr("提示")); connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); + // 我真的不想拉,但是今天状态燃尽了,以后再改了 + m_TestPrintWidget->setPrintSettingWidget(m_PrintSetting); + // 信号槽连接(原逻辑完全不变) connect(m_MainWidget, &MainWidget::sendButtonClickedSignal, this, &InkJetPrinter::getMainWidgetButtonClickedSlot); connect(m_MainWidget,SIGNAL(setDisableAll()),this,SLOT(disableTabClick())); diff --git a/Printsetting.cpp b/Printsetting.cpp index 70654c5..396f3d1 100644 --- a/Printsetting.cpp +++ b/Printsetting.cpp @@ -3,6 +3,7 @@ #include #include +#include "LogInfo.h" PrintSetting::PrintSetting(QWidget *parent) : QWidget(parent), @@ -29,9 +30,17 @@ PrintSetting::PrintSetting(QWidget *parent) : ui->checkBoxPulseOutputEnable->hide(); ui->comboBoxEleEyeMakeClean->setCurrentIndex(0); ui->comboBoxEleEyeMakeClean->hide(); + + ui->labelSynTriggerPrintLen->hide(); + ui->spinBoxSynTriggerPrintLen->hide(); + + ui->labelSynPrintMode->hide(); + ui->comboBoxSynPrintMode->hide(); + // 间隔模式默认行末对行首 - ui->comboBoxTimeTriggerMode->setEnabled(false); + ui->comboBoxTimeTriggerMode->hide(); ui->spinBoxpluseSinal->hide(); + ui->labelTimeTriggerMode->hide(); ui->label_6->hide(); init(); @@ -84,26 +93,13 @@ void PrintSetting::buttonClickedSlot() { emit sendButtonClickedSignal(1); }else if(btn == m_checkBtn){ - emit sendButtonClickedSignal(2); on_pushButtonApply_pressed(); + emit sendButtonClickedSignal(2); } } void PrintSetting::on_pushButtonApply_pressed(){ - - applyUIPara(); - applyUITriggerPara(); - - if(sysPara->devOp->writeFpgaPrintPara(true) != -1) { - QMessageBox box(QMessageBox::Icon::Information, tr("提示"), tr("应用成功"), QMessageBox::Ok, nullptr); - auto btn = box.button(QMessageBox::Ok); - // btn->setFixedSize(80, 40); - - box.exec(); - } - - if(sysPara) - sysPara->saveParaToFile (); + applyPrintSettingsToSysPara(true); } void PrintSetting::applyUIPara(){ @@ -158,7 +154,6 @@ void PrintSetting::updateSysParaToUI(){ } } - void PrintSetting::TriggerupdateSysParaToUI(){ if(sysPara) { @@ -294,8 +289,8 @@ void PrintSetting::applyUITriggerPara(){ { ui->labelOutputPulseDelayMs->setText(tr("延时(毫米):")); } - else ui->labelOutputPulseDelayMs->setText(tr("延时(毫秒):")); - + else + ui->labelOutputPulseDelayMs->setText(tr("延时(毫秒):")); } } @@ -303,19 +298,19 @@ void PrintSetting::applyUITriggerPara(){ void PrintSetting::GetTriggerUIPara(){ if(sysPara){ sysPara->para.eleEyeTriggerPrintDelay = ui->spinBoxEleEyeTriggerPrintDelay->value(); - sysPara->para.timeTriggerPrintMode = ui->comboBoxTimeTriggerMode->currentIndex(); + sysPara->para.timeTriggerPrintMode = 0; // ui->comboBoxTimeTriggerMode->currentIndex(); sysPara->para.elecEyeTriggerInterval = ui->spinBoxEleEyeTriggerIntervalMs->value(); //电眼触发的重复间隔 int value = 0; - if (ui->cb_unlimited->isChecked()) value = UINT_MAX / 2; + if (ui->cb_unlimited->isChecked()) value = UINT16_MAX; else value = ui->spinBoxEleEyeTriggerRepeatCnt->value(); sysPara->para.photoElectricityRepeateNum = value; - sysPara->para.synTriggerPrintLenMm = ui->spinBoxSynTriggerPrintLen->text().toFloat(); + sysPara->para.synTriggerPrintLenMm = ui->spinBoxEleEyeTriggerIntervalMs->value(); //sysPara->para.synTriggerPrintLenMm = ui->spinBoxSynTriggerPrintLen->value(); sysPara->para.synPulseNumPerMm = ui->lineEditTriggerPulsePerMm->text().toFloat(); - sysPara->para.sysTriggerPrintMode = ui->comboBoxSynPrintMode->currentIndex(); + sysPara->para.sysTriggerPrintMode = SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH; // ui->comboBoxSynPrintMode->currentIndex(); if(sysPara->para.sysTriggerPrintMode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH) //edit@11-19 ;//sysPara->para.synCharWidthRatio = ui->spinBoxSynTriggerPrintLenRatio->value(); @@ -751,6 +746,36 @@ void PrintSetting::setEnableSynTriggerSetting(bool flag){ ui->comboBoxSynPrintMode->setEnabled(flag); } +void PrintSetting::applyPrintSettingsToSysPara(bool showTip) +{ + applyUIPara(); + applyUITriggerPara(); + + if(sysPara->devOp->writeFpgaPrintPara(true) != -1 && showTip) { + QMessageBox box(QMessageBox::Icon::Information, tr("提示"), tr("应用成功"), QMessageBox::Ok, nullptr); + auto btn = box.button(QMessageBox::Ok); + // btn->setFixedSize(80, 40); + + box.exec(); + } + + if(sysPara) + sysPara->saveParaToFile (); +} + +PrintSettingModel PrintSetting::model() +{ + return PrintSettingModel::fromSysPara(sysPara); +} + +void PrintSetting::setModel(const PrintSettingModel &model) +{ + PrintSettingModel::applyToSysPara(model, sysPara); + updateSysParaToUI(); + + LogInfo::setRunStatusText("Print settings: " + PrintSettingModel::toString(model)); +} + void PrintSetting::on_radioButtonSynTriggerInner_clicked() { setEnableSynTriggerSetting(false); @@ -803,3 +828,152 @@ void PrintSetting::on_cb_unlimited_clicked(bool checked) { // ui->spinBoxEleEyeTriggerRepeatCnt->setEnabled(!checked); } + +void PrintSettingModel::loadFromXml(PrintSettingModel& model, const QXmlStreamAttributes& attrs) +{ + model.timeTriggerPrintMode = attrs.value("timeTriggerPrintMode").toInt(); + model.triggerInterval = attrs.value("triggerInterval").toUInt(); + model.eleEyeRepeatCnt = attrs.value("eleEyeRepeatCnt").toUInt(); + model.triggerMode = attrs.value("triggerMode").toUInt(); + model.encoderPulsePerMm = attrs.value("encoderPulsePerMm").toFloat(); + model.printColDelay = attrs.value("printColDelay").toUInt(); + model.volParaIndex = (unsigned short)attrs.value("volParaIndex").toUInt(); + model.eleEyeTriggerPrintDelay = (unsigned short)attrs.value("eleEyeTriggerPrintDelay").toUInt(); + model.altMirrorGap = (unsigned short)attrs.value("altMirrorGap").toUInt(); + model.eleMaskTime = (unsigned short)attrs.value("eleMaskTime").toUInt(); + model.syncTriggerMode = (unsigned char)attrs.value("syncTriggerMode").toUInt(); + model.mode0211 = (unsigned char)attrs.value("mode0211").toUInt(); + model.highVoltageAmplitude = (unsigned char)attrs.value("highVoltageAmplitude").toUInt(); + model.altMirrorType = (unsigned char)attrs.value("altMirrorType").toUInt(); + model.leftRightInverse = attrs.value("leftRightInverse").toInt() != 0; + model.upDownInverse = attrs.value("upDownInverse").toInt() != 0; + model.eleEyeTriggerSynPrintEn = attrs.value("eleEyeTriggerSynPrintEn").toInt() != 0; +} + +void PrintSettingModel::saveToXml(const PrintSettingModel& model, QXmlStreamWriter& writer) +{ + writer.writeAttribute("timeTriggerPrintMode", QString::number(model.timeTriggerPrintMode)); + writer.writeAttribute("triggerInterval", QString::number(model.triggerInterval)); + writer.writeAttribute("eleEyeRepeatCnt", QString::number(model.eleEyeRepeatCnt)); + writer.writeAttribute("triggerMode", QString::number(model.triggerMode)); + writer.writeAttribute("encoderPulsePerMm", QString::number((double)model.encoderPulsePerMm)); + writer.writeAttribute("printColDelay", QString::number(model.printColDelay)); + writer.writeAttribute("volParaIndex", QString::number(model.volParaIndex)); + writer.writeAttribute("eleEyeTriggerPrintDelay", QString::number(model.eleEyeTriggerPrintDelay)); + writer.writeAttribute("altMirrorGap", QString::number(model.altMirrorGap)); + writer.writeAttribute("eleMaskTime", QString::number(model.eleMaskTime)); + writer.writeAttribute("syncTriggerMode", QString::number(model.syncTriggerMode)); + writer.writeAttribute("mode0211", QString::number(model.mode0211)); + writer.writeAttribute("highVoltageAmplitude", QString::number(model.highVoltageAmplitude)); + writer.writeAttribute("altMirrorType", QString::number(model.altMirrorType)); + writer.writeAttribute("leftRightInverse", QString::number(model.leftRightInverse)); + writer.writeAttribute("upDownInverse", QString::number(model.upDownInverse)); + writer.writeAttribute("eleEyeTriggerSynPrintEn", QString::number(model.eleEyeTriggerSynPrintEn)); +} + +void PrintSettingModel::applyToSysPara(const PrintSettingModel &model, SysPara *sysPara) +{ + // 喷印风格相关 + sysPara->para.leftRightInverse = model.leftRightInverse; + sysPara->para.upDownInverse = model.upDownInverse; + sysPara->para.currSelectVolPara = model.volParaIndex; + sysPara->para.printColDelay = model.printColDelay; + sysPara->para.HighVoltageAmplitude = model.highVoltageAmplitude; + + sysPara->para.mode0211 = model.mode0211; + + sysPara->para.printTriggerMode = model.triggerMode; + + sysPara->para.eleEyeTriggerPrintDelay = model.eleEyeTriggerPrintDelay; + + sysPara->para.timeTriggerPrintMode = model.timeTriggerPrintMode; + sysPara->para.elecEyeTriggerInterval = model.triggerInterval; + sysPara->para.photoElectricityRepeateNum = model.eleEyeRepeatCnt; + sysPara->para.synTriggerPrintLenMm = (float)model.triggerInterval; + sysPara->para.synPulseNumPerMm = model.encoderPulsePerMm; + sysPara->para.sysTriggerPrintMode = SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH; + sysPara->para.AltMirrorGap = (model.altMirrorType << 12) | ((uint32_t)(model.altMirrorGap) & 0x0fff); + sysPara->para.printDelayMs = (int)model.triggerInterval; + + sysPara->para.eleEyeTriggerSynPrintEn = model.eleEyeTriggerSynPrintEn; + + // 韩国版本不需要电眼清零 byons@2026年6月23日 + sysPara->para.eleEyeClearCntInSynMode = 0x20; + + sysPara->para.syncRevCompDisable = 0; + sysPara->para.synPulsePerMmX8 = (unsigned short)((unsigned int)sysPara->para.synPulseNumPerMm <<8); + sysPara->para.eleMaskTime = model.eleMaskTime; + + // 带补偿的正反转打印选项,位于最后两个comboBox item + sysPara->para.synchronizorActType = model.syncTriggerMode > 2 ? + model.syncTriggerMode - 2 : model.syncTriggerMode; + + sysPara->para.syncRevCompDisable = model.syncTriggerMode <= 2; + + sysPara->para.eleEyeEdgetTriggerInner = + model.triggerMode != PRINT_TRIGGER_ELEC_EYE_EDGE + && model.triggerMode != PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; + + sysPara->para.eleEyeEdgetTriggerExternal = !sysPara->para.eleEyeEdgetTriggerInner; + + bool isEyeMode = (model.triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE + || model.triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL); + sysPara->para.synTriggerInner = + model.triggerMode != PRINT_TRIGGER_SYNCHRONIZER + && !(isEyeMode && model.eleEyeTriggerSynPrintEn); + + sysPara->para.synTriggerExternal = !sysPara->para.synTriggerInner; +} + +PrintSettingModel PrintSettingModel::fromSysPara(SysPara *sysPara) +{ + PrintSettingModel model; + model.leftRightInverse = sysPara->para.leftRightInverse; + model.upDownInverse = sysPara->para.upDownInverse; + model.mode0211 = sysPara->para.mode0211; + model.printColDelay = sysPara->para.printColDelay; + model.highVoltageAmplitude = sysPara->para.HighVoltageAmplitude; + model.volParaIndex = sysPara->para.currSelectVolPara; + + model.triggerMode = sysPara->para.printTriggerMode; + model.eleEyeTriggerSynPrintEn = sysPara->para.eleEyeTriggerSynPrintEn; + model.eleMaskTime = sysPara->para.eleMaskTime; + + int idx = int(sysPara->para.synchronizorActType); + if (!sysPara->para.syncRevCompDisable && sysPara->para.synchronizorActType != 0) { + idx = int(sysPara->para.synchronizorActType) + 2; + } + model.syncTriggerMode = idx; + + if(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || + sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) { + model.triggerInterval = (unsigned)sysPara->para.elecEyeTriggerInterval; + } + else if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) { + model.triggerInterval = (unsigned)sysPara->para.synTriggerPrintLenMm; + } + else { + model.triggerInterval = (unsigned)sysPara->para.printDelayMs; + } + + model.timeTriggerPrintMode = sysPara->para.timeTriggerPrintMode; + model.eleEyeRepeatCnt = sysPara->para.photoElectricityRepeateNum; + model.eleEyeTriggerPrintDelay = sysPara->para.eleEyeTriggerPrintDelay; + model.encoderPulsePerMm = sysPara->para.synPulseNumPerMm; + model.altMirrorType = sysPara->para.AltMirrorGap >> 12; + model.altMirrorGap = sysPara->para.AltMirrorGap & 0x0fff; + + return model; +} + +QString PrintSettingModel::toString(const PrintSettingModel &model) +{ + QString str = QString::asprintf("LRInverse: %d, UpDownInverse: %d, printColDelay: %d, \r\n" + "highVoltageAmplitude: %d, volParaIndex: %d, triggerMode: %d, eleEyeTriggerSynPrintEn: %d, \r\n" + "eleMaskTime: %d, triggerInterval: %d, timeTriggerPrintMode: %d, eleEyeRepeatCnt: %d, \r\n" + "eleEyeTriggerPrintDelay: %d, encoderPulsePerMm: %d, altMirrorType: %d, altMirrorGap: %d. \r\n", + model.leftRightInverse, model.upDownInverse, model.printColDelay, model.highVoltageAmplitude, model.volParaIndex, model.triggerMode, + model.eleEyeTriggerSynPrintEn, model.eleMaskTime, model.triggerInterval, model.timeTriggerPrintMode, model.eleEyeRepeatCnt, + model.eleEyeTriggerPrintDelay, model.encoderPulsePerMm, model.altMirrorType, model.altMirrorGap); + return str; +} \ No newline at end of file diff --git a/Printsetting.h b/Printsetting.h index aba9fdf..a3f35f5 100644 --- a/Printsetting.h +++ b/Printsetting.h @@ -4,12 +4,87 @@ #include #include +#include #include "PulseNumFix.h" namespace Ui { class PrintSetting; } +#pragma pack(1) + +/** + * @brief 从sysPara中提取的某些用于跟随工作文件保存的打印设置 + * + * + * @remark + * 字段声明位置按照类型长度降序排列,用于在紧凑内存对齐的状态下尽量提升性能 + * 所以看声明顺序有点奇怪 + * 使用紧凑内存对齐的原因是为了方便直接映射为字符串,方便保存 + */ +struct PrintSettingModel +{ + int timeTriggerPrintMode = 0; // 间隔模式, 0: 行末-> 行首 1: 行首对行首 ,韩国人要求只保留一个,所以应该固定为 0 + + /** + * 触发间隔。 + * 时延模式,指间隔多久打印一次。单位ms, + * 电眼 + 同步器模式: 根据 eleEyeRepeatCnt 设定的重复次数,确定重复间隔,单位长度mm + * 电眼模式:根据 eleEyeRepeatCnt 设定的重复次数,确定重复间隔,单位是时间 ms + * 同步器模式:重复间隔,单位长度 mm + * */ + unsigned triggerInterval = 0; + + unsigned eleEyeRepeatCnt = 1; // 电眼触发时,打印内容的次数,也就是重复数 + + unsigned triggerMode = 0; // 触发模式 + + float encoderPulsePerMm = 40; // 编码器的每毫米脉冲数 + + unsigned printColDelay = 6; // 打印列延迟,(字宽) + + unsigned short volParaIndex = 0; // 喷印模式的索引, 决定选择哪组电压参数 + + unsigned short eleEyeTriggerPrintDelay = 0; // 0x38 电眼 + 同步器模式下,电眼触发后,同步打印延迟时间,单位:毫秒 + + unsigned short altMirrorGap = 0; // 镜像交替间隔, 单位:喷印个数 + + unsigned short eleMaskTime = 0; // 电眼封锁时间或距离 单位ms或mm + + /** + * 同步器的正反转模式 + * 0:正反转打印 + * 1:只正转打印 + * 2:只反转打印 + * 3:带补偿的正转打印 + * 4:带补偿的反转打印 + */ + unsigned char syncTriggerMode = 0; + + unsigned char mode0211 = 1; // 0211模式 + + unsigned char highVoltageAmplitude = 75; // 界面显示 字高,但是名字叫 高压振幅? 谁解释一下 + + unsigned char altMirrorType = 0; // 镜像交替模式 + + bool leftRightInverse = false; // 信息左右颠倒 + + bool upDownInverse = false; // 信息上下颠倒 + + bool eleEyeTriggerSynPrintEn = false; + + static void loadFromXml(PrintSettingModel& model, const QXmlStreamAttributes& attrs); + static void saveToXml(const PrintSettingModel& model, QXmlStreamWriter& writer); + + static void applyToSysPara(const PrintSettingModel& model, SysPara* sysPara); + + static PrintSettingModel fromSysPara(SysPara* sysPara); + + static QString toString(const PrintSettingModel& model); +}; + +#pragma pack() + class PrintSetting : public QWidget { Q_OBJECT @@ -41,6 +116,12 @@ public: void setEnableSynTriggerSetting(bool); + void applyPrintSettingsToSysPara(bool showTip = true); + + PrintSettingModel model(); + + void setModel(const PrintSettingModel& model); + private slots: void buttonClickedSlot(); @@ -87,12 +168,9 @@ private: void init(); void applyStyleSheet(); // 应用样式表 - - signals: void sendButtonClickedSignal(int index); - }; -#endif // PRINTSETTING_H +#endif // PRINTSETTING_H \ No newline at end of file diff --git a/Printsetting.ui b/Printsetting.ui index 20ea97c..5505108 100644 --- a/Printsetting.ui +++ b/Printsetting.ui @@ -26,7 +26,7 @@ Qt::StrongFocus - 4 + 1 @@ -564,10 +564,36 @@ 210 60 521 - 191 + 81 + + + + + 0 + 0 + + + + + 150 + 0 + + + + Qt::LeftToRight + + + 脉冲数修正 + + + + :/icon/pulse.png:/icon/pulse.png + + + @@ -612,118 +638,6 @@ - - - - - 0 - 0 - - - - - 150 - 0 - - - - Qt::LeftToRight - - - 脉冲数修正 - - - - :/icon/pulse.png:/icon/pulse.png - - - - - - - - 16777215 - 37 - - - - Qt::LeftToRight - - - - - - 喷印间隔(毫米): - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 150 - 16777215 - - - - - - - - - - - 同步喷印模式: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 30 - - - - - 16777215 - 37 - - - - 0 - - - - 按字符宽度 - - - - - 按喷印比例 - - - - @@ -815,6 +729,116 @@ + + + + 100 + 350 + 179 + 37 + + + + + 16777215 + 37 + + + + Qt::LeftToRight + + + + + + 喷印间隔(毫米): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 280 + 350 + 150 + 31 + + + + + 0 + 0 + + + + + 150 + 16777215 + + + + + + + 280 + 310 + 150 + 36 + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 37 + + + + 0 + + + + 按字符宽度 + + + + + 按喷印比例 + + + + + + + 90 + 310 + 179 + 36 + + + + + + + 同步喷印模式: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + diff --git a/testprintwidget.cpp b/testprintwidget.cpp index 00a5eb0..775ba52 100644 --- a/testprintwidget.cpp +++ b/testprintwidget.cpp @@ -16,7 +16,7 @@ #include #include "scene/PicScheduleShiftItem.h" #include "scene/PicCounterItem.h" - +#include "Printsetting.h" #pragma execution_character_set("utf-8") @@ -430,6 +430,10 @@ void TestPrintWidget::saveFile(){ // writer.writeCDATA((picText->toHtml())); writer.writeEndElement(); // 结束子元素 } + + writer.writeEmptyElement("PrintSettings"); + PrintSettingModel::saveToXml(m_printSetting->model(), writer); + writer.writeEndElement(); // 结束根元素 writer.writeEndDocument(); // 结束文档 fsync(file.handle()); @@ -455,7 +459,8 @@ void TestPrintWidget::onSaveASFile(QString filename,bool Flag){// use for dialog /* * 和DialogFileOperation对接 * */ -void TestPrintWidget::onFileOpen(QString filePath,bool insertFlag){ +void TestPrintWidget::onFileOpen(QString filePath,bool reviewFlag){ + if(editMode==SCENE) { if(filePath.endsWith(".xml")) { @@ -527,10 +532,12 @@ void TestPrintWidget::onFileOpen(QString filePath,bool insertFlag){ //qDebug() << QString::fromLocal8Bit("属性:Version(%1)").arg(strVersion); } - parseVbfile(reader); + parseVbfile(reader, reviewFlag); } + break; - } + } + case QXmlStreamReader::EndDocument: { //*/*/ 结束文档 //qDebug() << QString::fromLocal8Bit("********** 结束文档 ********** "); break; @@ -563,7 +570,7 @@ void TestPrintWidget::onFileOpen(QString filePath,bool insertFlag){ extern QStringList stringListRecive; -void TestPrintWidget::parseVbfile(QXmlStreamReader &reader) { +void TestPrintWidget::parseVbfile(QXmlStreamReader &reader, bool loadPrintSetting) { // int textItemPosX; // int textItemPosY; // textItemPosX = picText->pos().x() - pPicScene->itemsBoundingRect().x(); @@ -605,7 +612,17 @@ void TestPrintWidget::parseVbfile(QXmlStreamReader &reader) { } else if(strElementName == "itemAttrs") { itemAttrs = reader.attributes(); + } else if(strElementName == "PrintSettings" && loadPrintSetting) { + + // 加载打印设置 + QXmlStreamAttributes attrs = reader.attributes(); + PrintSettingModel model; + PrintSettingModel::loadFromXml(model, attrs); + m_printSetting->setModel(model); + m_printSetting->applyPrintSettingsToSysPara(false); + reader.skipCurrentElement(); } + } else if (reader.isEntityReference()) { // 实体引用 QString strName = reader.name().toString(); QString strText = reader.text().toString(); @@ -950,6 +967,27 @@ void TestPrintWidget::on_delButton_pressed() } } +void TestPrintWidget::setPrintSettingWidget(PrintSetting *wid) +{ + if(!wid) { + qWarning() << "Empty PrintSetting object pointer"; + return; + } + + if(m_printSetting) { + m_printSetting->disconnect(this); + m_printSetting = nullptr; + } + + m_printSetting = wid; + connect(m_printSetting, &PrintSetting::sendButtonClickedSignal, this, [this](int i) { + if(i == 2) { + saveFile(); + LogInfo::setRunStatusText("Save print setting."); + } + }); +} + bool TestPrintWidget::eventFilter(QObject *watched, QEvent *event) { // 只处理 graphicsView 的事件 if (watched == ui.graphicsView) { @@ -1071,16 +1109,16 @@ void TestPrintWidget::onSceneFocusedItemPosChanged(QPoint p) ui.m_lblY->setText(QString::asprintf("Y:%d", p.y())); } -void TestPrintWidget::on_newfileButton_pressed(){ - +void TestPrintWidget::on_newfileButton_pressed() +{ // if (maybeSave()) { - pPicScene->clear(); - pViewer->viewport()->update(); - xmlfileName = ""; + pPicScene->clear(); + pViewer->viewport()->update(); + xmlfileName = ""; - // TODO:: 新建文件的入口 + // TODO:: 新建文件的入口 - sendButtonClickedSignal(21); //新建文件完成 + sendButtonClickedSignal(21); //新建文件完成 } void TestPrintWidget::slt_BarCodeItemDone() diff --git a/testprintwidget.h b/testprintwidget.h index 08ea9e4..7353cc1 100644 --- a/testprintwidget.h +++ b/testprintwidget.h @@ -39,6 +39,8 @@ typedef struct ItemReplaceInfo #define SOURCE_COUNTER1 "Counter1_QvQ" #define SOURCE_COUNTER2 "Counter2_QvQ" +class PrintSetting; + class TestPrintWidget : public QWidget { Q_OBJECT @@ -67,6 +69,8 @@ public: void on_delButton_pressed(); + void setPrintSettingWidget(PrintSetting* wid); + void addDateTimeItem(const DateItemModel& model, const TextItemModel& textModel); void addScheduleShiftsItem(QVector schedules, TextItemModel txtModel); @@ -136,7 +140,7 @@ private: QTextEdit* m_TextEdit = nullptr; QLineEdit* m_LineEdit; - void parseVbfile(QXmlStreamReader &reader); + void parseVbfile(QXmlStreamReader &reader, bool loadPrintSetting = false); /** * @brief 对 on_KeyUp_clicked 等按键事件的简便包装 @@ -160,6 +164,8 @@ private: // 修改条形码和二维码的标志 bool editCodeFlag = false; + PrintSetting* m_printSetting = nullptr; + QString xmlfileName; DialogSaveFile *dialogSaveFile; DialogFileOperation *dialogFileOperation;