From 358a56f60205c1b9e6bf0a24c14b7cf9df6a0fe9 Mon Sep 17 00:00:00 2001 From: Byons Date: Mon, 25 May 2026 15:58:11 +0800 Subject: [PATCH] =?UTF-8?q?2026=E5=B9=B45=E6=9C=8825=E6=97=A515:57:50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DateVarSet.cpp | 269 ++------------------------------ DateVarSet.h | 15 +- InkJetPrinter.cpp | 50 ++---- InkJetPrinter.h | 2 +- InputMethod.cpp | 11 ++ ItemEditor.cpp | 1 + MyInputMethod.cpp | 7 +- MyInputMethod.h | 2 + Printsetting.cpp | 49 ++++-- Printsetting.ui | 6 +- datevarset.ui | 2 +- dialogmaintenancetimesetting.ui | 24 ++- fileManage/FileManageWidget.cpp | 11 +- fileManage/FileManageWidget.ui | 154 ++++++++++++++++-- scene/ScheduleShiftsEditor.cpp | 7 +- scene/ScheduleShiftsEditor.h | 4 - scene/pictextitem.cpp | 6 + scene/pictextitem.h | 5 +- testprintwidget.cpp | 259 +++++++++++++++--------------- testprintwidget.h | 21 ++- 20 files changed, 413 insertions(+), 492 deletions(-) diff --git a/DateVarSet.cpp b/DateVarSet.cpp index ab79292..f78cbed 100644 --- a/DateVarSet.cpp +++ b/DateVarSet.cpp @@ -133,31 +133,14 @@ void DateVarSet::bindSysPara(SysPara *sysPara){ this->sysPara = sysPara; } -void DateVarSet::bindTxTEdit(QTextEdit* textEdit){ - m_textEdit = textEdit; -} - void DateVarSet::buttonClickedSlot() { QPushButton* btn = qobject_cast(sender()); - if (btn == ui->checkBtn) { - if(true) - useReplaceInsertVar(); - else - on_buttonInsertVari_pressed(); - - auto item = dynamic_cast(m_generalSettings->currentItem()); - if(item) - item->setModel(dateModel()); - + if (btn == ui->checkBtn) { emit sendButtonClickedSignal(1); return; }else if(btn == ui->closeBtn) { - auto item = m_generalSettings->currentItem(); - if(item) - item->setAttrs(m_backup); - emit sendButtonClickedSignal(2); return; @@ -211,246 +194,12 @@ DateVarSet::~DateVarSet() void DateVarSet::getValue(int *varType,int *digitalWidth,unsigned char *splitMode){ int type = 0,width = 0; - // if(ui->radioButtonYear->isChecked()) - // type = 0; - // else if(ui->radioButtonMonth->isChecked()) - // type = 1; - // else if(ui->radioButtonDay->isChecked()) - // type = 2; - // else if(ui->radioButtonWeek->isChecked()) - // type = 3; - // else if(ui->radioButtonHour->isChecked()) - // type = 4; - // else if(ui->radioButtonMinute->isChecked()) - // type = 5; - // else if(ui->radioButtonSecond->isChecked()) - // type = 6; - - // else if(ui->radioButtonXDay->isChecked()) - // type = 14; - - // else if(ui->radioButtonExpiry->isChecked()) - // { - // type = 80; - // } - // else if(ui->radioButtonCurDate->isChecked()) - // { - // type = 81; - // } - - // width = ui->cb_digits->currentText().toInt(); - if(varType && digitalWidth){ *varType = type; *digitalWidth = width; } } - -void DateVarSet::on_buttonInsertVari_pressed() -{ - QString s,fontname=""; - if(sysPara) - { - s= sysPara->para.qrOption.text; - if(s.length()>120)s="string to long."; - } - int pixelSize = 9; - QFont font; - fontname = "Dinkie9"; - if(m_generalSettings->currentItem()) { - fontname = m_generalSettings->font().family(); - } - else { - - font.setFamily(fontname); - - font.setPixelSize(pixelSize); - font.setWeight(false && (pixelSize<=16) ?QFont::Bold:QFont::Normal); - font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); - } - - QFontMetrics fontMetrics(font); - - int width = (fontMetrics.width("0123456789"))/10; - int height = fontMetrics.ascent()+ fontMetrics.descent(); - int digitalNum; - int varType; - - height = font.pixelSize(); - - unsigned char splitMode=sysPara->para.ExpirySplitMode; - getValue(&varType,&digitalNum,&splitMode); - - fmt = m_textEdit->currentCharFormat (); - - if((varType<9 || varType==14)) - { - int varType1= varType; - - if(fontname.contains("SerifL") ||fontname.contains("serifl") ) - varType1= 20+varType; - else if(fontname.contains("SerifR") ||fontname.contains("serifr") ) - varType1= 20+varType; - else if(fontname.contains("bangla") ) - varType1= 30+varType; - else if(fontname.contains("biyangF") ) - varType1= 50+varType; - else if(fontname.contains("Roman") ) - varType1= 60+varType; - // varType1= 40+varType; // 变量右横时取 40,左横时取 20 - - m_textEdit->insertHtml(QString("") - .arg(varType).arg(false && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) - .arg(height+1).arg(width*digitalNum).arg(varType1)); //插入索引后 - qDebug() << m_textEdit->toHtml(); - } // 普通变量 VarType<=8 - else if(varType ==EXPIRYDATE){ //80 :/80/image/expiryDate8.bmp qrc:/80/image/expiryDate875.bmp - // QImage img; - // img.load("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/80/image/digitalWidth8.bmp"); - // img.setPixel(0,4,0xffff0Cfc); - // img.setPixel(0,5,0xffff0Cfc); - // img.save("/home/student/mini2440/UP/QtUI/QRUI_SUNV54/80/image/curDate8.bmp"); - // 0xff00fc - int varType1 = varType; - if(fontname.contains("bangla") ) - { - varType1= 10+varType; - } - else if(fontname.contains("biyangF") ) - { - varType1= 20+varType; - } - else if(fontname.contains("Roman") ) - { - varType1= 30+varType; - } - - sysPara->print.ExpiryVar.splitMode=splitMode; - font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); - QFontMetrics fontMetrics(font); - - QHash dateFormat; - dateFormat.insert(0,"yyyy-MM-dd"); - dateFormat.insert(1,"yyyy/MM/dd"); - dateFormat.insert(2,"yyyyMMdd"); - dateFormat.insert(3,"yyyy年MM月dd日"); - dateFormat.insert(4,"yyyy-MM-dd hh:mm"); - dateFormat.insert(5,"yyyy/MM/dd hh:mm"); - dateFormat.insert(6,"yyyyMMddhhmm"); - dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); - dateFormat.insert(8,"hh:mm"); - dateFormat.insert(9,"ddhhmm"); - dateFormat.insert(10,"dd MM yy"); - dateFormat.insert(11,"dd/MM/yy"); - dateFormat.insert(12,"dd/MM/yyyy"); - dateFormat.insert(13,"dd-MM-yy"); - dateFormat.insert(14,"dd-MM-yyyy"); - //dateFormat.insert(10,"x"); - QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); - - int dateTimeWidth = fontMetrics.width(DateTime); - - if(DateTime == "x") - { - qDebug()<<" x handle"; - m_textEdit->insertHtml(QString("") - .arg(varType).arg(false && (pixelSize<=16)?(175):1) - .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 - sysPara->print.ExpiryVar.bold = false; - m_textEdit->mergeCurrentCharFormat(fmt); - }else - { - if(splitMode == 3 || splitMode ==7 ) - { - height = fontMetrics.ascent(); - } - m_textEdit->insertHtml(QString("") - .arg(varType1).arg(false && (pixelSize<=16)?(875):8) - .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 - sysPara->print.ExpiryVar.bold = false; - m_textEdit->mergeCurrentCharFormat(fmt); - } - } - else if(varType ==CURDATE ){ //81 :/80/image/expiryDate8.bmp qrc:/80/image/curDate8.bmp - int varType1 = varType; - if(fontname.contains("bangla") ) - { - varType1= 10+varType; - } - else if(fontname.contains("biyangF") ) - { - varType1= 20+varType; - } - else if(fontname.contains("biyangF") ) - { - varType1= 30+varType; - } - - // 0xff00fc - //qDebug()<<"CurDateVar height"<print.CurDateVar.splitMode = splitMode; - font.setLetterSpacing(QFont::AbsoluteSpacing, sysPara->para.textEditCharSpace); - QFontMetrics fontMetrics(font); - - 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"); - QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); - int dateTimeWidth = fontMetrics.width(DateTime) ; - qDebug()<<"insert splitMode="<insertHtml(QString("") - .arg(varType).arg(false && (pixelSize<=16)?(875):1) - .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 - m_textEdit->mergeCurrentCharFormat(fmt); - }else - { - if(splitMode == 3 || splitMode ==7 ) - { - height = fontMetrics.ascent();//fontMetrics.ascent()+ fontMetrics.descent(); - } - m_textEdit->insertHtml(QString("") - .arg(varType1).arg(false && (pixelSize<=16)?(875):8) - .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 - m_textEdit->mergeCurrentCharFormat(fmt); - } - } - - m_textEdit->setFocus(); -} - -void DateVarSet::edit(PicDateItem*item) -{ - m_backup.clear(); - - if(!item) { - qWarning() << "Invalied arguement: " << item; - return; - } - - item->saveAttrs(m_backup); - - m_generalSettings->edit(item); - setDateModel(item->model()); -} - DateItemModel DateVarSet::dateModel() { DateItemModel model; @@ -512,16 +261,20 @@ void DateVarSet::setDateModel(const DateItemModel &model) ui->tabWidget->setCurrentIndex(1); } -void DateVarSet::useReplaceInsertVar(){ - QString dateFormat = ui->lineEdit_DateFormat->text(); - m_textEdit->setText(dateFormat); -} - - QString DateVarSet::getFamilyName(int fontsize){ return "YaHei"+QString::number(fontsize); } +TextItemModel DateVarSet::textItemModeL() +{ + return m_generalSettings->viewModel(); +} + +void DateVarSet::setTextItemModel(const TextItemModel &model) +{ + m_generalSettings->setViewModel(model); +} + void DateVarSet::applyStyleSheet() { QString styleSheet = diff --git a/DateVarSet.h b/DateVarSet.h index b496a04..703cb8a 100644 --- a/DateVarSet.h +++ b/DateVarSet.h @@ -32,19 +32,17 @@ public: // void applyStyleSheet(); void bindSysPara(SysPara *sysPara); - - void bindTxTEdit(QTextEdit* textEdit); - - void on_buttonInsertVari_pressed(); - - void edit(PicDateItem* item); - + DateItemModel dateModel(); void setDateModel(const DateItemModel& model); QString getFamilyName(int); + TextItemModel textItemModeL(); + + void setTextItemModel(const TextItemModel& model); + void loadMonthShow(); void loadDataShow(); @@ -67,8 +65,6 @@ public: void getDayValue(); - void useReplaceInsertVar(); - void initShowLineEdit(); void initReplaceValue(); @@ -113,7 +109,6 @@ private: ItemGeneralSettings* m_generalSettings = nullptr; int digitWidth; - QTextEdit* m_textEdit; QTextCharFormat fmt; int varTypeSet; QString varHtmlStr; diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index 7cb9041..64abd2b 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -106,7 +106,7 @@ void InkJetPrinter::init() connect(m_TestPrintWidget, &TestPrintWidget::sendButtonClickedSignal, this, &InkJetPrinter::getTestPrintWidgetButtonClickedSlot); // TestPrintWidget::sendButtonClickedSignal(16) 转由 openDatetimeEditor 处理 - connect(m_TestPrintWidget, &TestPrintWidget::sig_showEditDataTime, this, &InkJetPrinter::openDatetimeEditor); + connect(m_TestPrintWidget, &TestPrintWidget::sig_showEditDateTime, this, &InkJetPrinter::openDatetimeEditor); // 班时元素与编辑 连接 connect(m_TestPrintWidget, &TestPrintWidget::sig_showScheduleShiftsEditor, this, &InkJetPrinter::showScheduleShiftsEditor); @@ -184,7 +184,6 @@ void InkJetPrinter::init() m_MainWidget->bindTxTEdit(m_TestPrintWidget->getQTextEdit()); m_MainWidget->bindPicScene(m_TestPrintWidget->getPicScene()); m_FontSetWidget->bindTxTEdit(m_TestPrintWidget->getQTextEdit()); - m_DateVarSet->bindTxTEdit(m_TestPrintWidget->getQTextEdit()); m_CounterVarSet->bindTxTEdit(m_TestPrintWidget->getQTextEdit()); m_BarCodeDlg->bindTxTEdit(m_TestPrintWidget->getQTextEdit()); m_QRCodeDlg->bindTxTEdit(m_TestPrintWidget->getQTextEdit()); @@ -1578,50 +1577,17 @@ void InkJetPrinter::getTestPrintWidgetButtonClickedSlot(int index) } } -void InkJetPrinter::openDatetimeEditor(PicDateItem* item) +void InkJetPrinter::openDatetimeEditor(DateItemModel dateModel, TextItemModel textItemModel) { m_DateVarSet->initUI(); m_DateVarSet->initReplaceValue(); - if(item) { - m_DateVarSet->edit(item); - } - else - m_DateVarSet->setDateModel(DateItemModel::createDefaultReplaceModel()); + m_DateVarSet->setTextItemModel(textItemModel); + m_DateVarSet->setDateModel(dateModel); m_StackedWidget->setCurrentWidget(m_DateVarSet); } -/* -void InkJetPrinter::getErCodeSettingsWidgetButtonClickedSlot(int index) -{ - switch (index) - { - case 1: - case 2: - m_StackedWidget->setCurrentWidget(m_TestPrintWidget); - break; - default: - break; - } -} -*/ - -/* -void InkJetPrinter::getMainInterfaceWidgetButtonClickedSlot(int index) -{ - switch (index) - { - case 1: - m_StackedWidget->setCurrentWidget(m_MainWidget); - break; - default: - break; - } -} -*/ - - void InkJetPrinter::getFontSetWidgetButtonClickedSlot(int index) { switch (index) @@ -1787,9 +1753,11 @@ void InkJetPrinter::getDateSetWidgetButtonClickSlot(int index){ { m_StackedWidget->setCurrentWidget(m_TestPrintWidget); // m_TestPrintWidget->onEditItemVarDone(); - DateItemModel model = m_DateVarSet->dateModel(); - qDebug() << "A new datetime pattern: " << model.datetimePattern; - m_TestPrintWidget->addDateTimeItem(model); + DateItemModel model = m_DateVarSet->dateModel(); + const auto textModel = m_DateVarSet->textItemModeL(); + qInfo() << "A new datetime pattern: " << model.datetimePattern; + qInfo() << "Text model: " << TextItemModel::toString(textModel); + m_TestPrintWidget->addDateTimeItem(model, textModel); break; } case 2: diff --git a/InkJetPrinter.h b/InkJetPrinter.h index 62c9d63..59285de 100644 --- a/InkJetPrinter.h +++ b/InkJetPrinter.h @@ -116,7 +116,7 @@ private slots: void timerHandler(); void getMainWidgetButtonClickedSlot(int index); void getTestPrintWidgetButtonClickedSlot(int index); - void openDatetimeEditor(PicDateItem* item); + void openDatetimeEditor(DateItemModel dateModel, TextItemModel textItemModel); // void getErCodeSettingsWidgetButtonClickedSlot(int index); // void getMainInterfaceWidgetButtonClickedSlot(int index); void viscosity_timerHandler(); diff --git a/InputMethod.cpp b/InputMethod.cpp index fb69b58..95b72b1 100644 --- a/InputMethod.cpp +++ b/InputMethod.cpp @@ -1106,6 +1106,17 @@ void InputMethod::onInputMethodClicked(){ void InputMethod::onEnterClicked(){ // userInputed("\n"); + + // 编辑界面的文本输入框,需要按下回车时触发回车事件,同时放弃焦点 + // 嘿!什么叫特事特办啊 byons@2026年5月25日 + if(m_edit && m_edit->property("Enter replace enter").toBool()) { + QKeyEvent pressEvent(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier); + QKeyEvent releaseEvent(QEvent::KeyRelease, Qt::Key_Enter, Qt::NoModifier); + QApplication::sendEvent(m_edit, &pressEvent); + QApplication::sendEvent(m_edit, &releaseEvent); + m_edit->clearFocus(); + } + emit onEnterClickedConfirm(); this->hide(); } diff --git a/ItemEditor.cpp b/ItemEditor.cpp index 88a7b85..f009b9b 100644 --- a/ItemEditor.cpp +++ b/ItemEditor.cpp @@ -38,6 +38,7 @@ void ItemEditor::edit(PicTextItem *item) void ItemEditor::onOkBtnClicked() { hide(); + m_generalSettings->applyToItem(m_currItem); emit accepted(); m_currItem = nullptr; } diff --git a/MyInputMethod.cpp b/MyInputMethod.cpp index 6fbc968..691b71f 100644 --- a/MyInputMethod.cpp +++ b/MyInputMethod.cpp @@ -36,7 +36,7 @@ MyInputMethod::MyInputMethod(QWidget *parent) inputMethod = input; digitalInput = new DigitalInput(this,parent); - connect(inputMethod,&InputMethod::onEnterClickedConfirm,this,&MyInputMethod::sendEnterClickedSignal); + connect(inputMethod,&InputMethod::onEnterClickedConfirm,this,&MyInputMethod::onInputMethodEnterClicked); } void MyInputMethod::SetInputFile(QString filename){ inputMethod->initInputMethod(filename); @@ -201,3 +201,8 @@ void MyInputMethod::getEnglishOrAarbic(bool flag){ if(QApplication::focusWidget()) QCoreApplication::sendEvent(QApplication::focusWidget(), &releaseEvent); } + + void MyInputMethod::MyInputMethod::onInputMethodEnterClicked() + { + emit sendEnterClickedSignal(); + } diff --git a/MyInputMethod.h b/MyInputMethod.h index 8c18934..47a3425 100644 --- a/MyInputMethod.h +++ b/MyInputMethod.h @@ -43,6 +43,8 @@ public: private slots: void switchBangalInput(bool); + void onInputMethodEnterClicked(); + public slots: void backSapceButtonDel(); diff --git a/Printsetting.cpp b/Printsetting.cpp index acfdd76..426bd0e 100644 --- a/Printsetting.cpp +++ b/Printsetting.cpp @@ -29,7 +29,7 @@ PrintSetting::PrintSetting(QWidget *parent) : init(); ui->eleEyeEdgetTriggerInner->click(); - ui->radioButtonSynTriggerExternal->click(); + ui->radioButtonSynTriggerInner->click(); } PrintSetting::~PrintSetting() @@ -125,9 +125,15 @@ void PrintSetting::TriggerupdateSysParaToUI(){ if(sysPara) { /*----------------------------------------*/ - setTriggerUI(sysPara->para.printTriggerMode); + if (sysPara->para.eleEyeTriggerSynPrintEn) //电眼触发的同步打印使能,电眼和同步器都选外部 + { + sysPara->para.eleEyeEdgetTriggerInner = 0; + sysPara->para.synTriggerInner = 0; + sysPara->para.eleEyeEdgetTriggerExternal = 1; + sysPara->para.synTriggerExternal = 1; + } ui->eleEyeEdgetTriggerInner->setChecked(sysPara->para.eleEyeEdgetTriggerInner); ui->eleEyeEdgetTriggerExternal->setChecked(sysPara->para.eleEyeEdgetTriggerExternal); ui->radioButtonSynTriggerInner->setChecked(sysPara->para.synTriggerInner); @@ -177,10 +183,9 @@ void PrintSetting::TriggerupdateSysParaToUI(){ if(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) ui->radioButtonEleEyeEdgetTrigger->setChecked(true); - if( sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL){ + if( sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) ui->radioButtonEleEyeLevelTrigger->setChecked(true); - } } } @@ -223,6 +228,10 @@ void PrintSetting::applyUITriggerPara(){ sysPara->para.eleEyeEdgetTriggerExternal = ui->eleEyeEdgetTriggerExternal->isChecked(); sysPara->para.synTriggerInner = ui->radioButtonSynTriggerInner->isChecked(); sysPara->para.synTriggerExternal = ui->radioButtonSynTriggerExternal->isChecked(); + // 电眼和同步器都选外部时,就是同步 + sysPara->para.eleEyeTriggerSynPrintEn = + sysPara->para.eleEyeEdgetTriggerExternal && sysPara->para.synTriggerExternal? 1 : 0; + sysPara->para.pulseOutputEnable = ui->checkBoxPulseOutputEnable->isChecked(); sysPara->para.productCntPerOutputPulse = ui->spinBoxProductCntPerOutputPulse->value(); @@ -252,7 +261,7 @@ void PrintSetting::GetTriggerUIPara(){ sysPara->para.timeTriggerPrintMode = ui->comboBoxTimeTriggerMode->currentIndex(); sysPara->para.elecEyeTriggerInterval = ui->spinBoxEleEyeTriggerIntervalMs->value(); //电眼触发的重复间隔 int value = 0; - if (ui->cb_unlimited) value = 65535; + if (ui->cb_unlimited->isChecked()) value = 65535; else value = ui->spinBoxEleEyeTriggerRepeatCnt->value(); sysPara->para.photoElectricityRepeateNum = value; @@ -354,6 +363,7 @@ void PrintSetting::on_radioButtonSynTrigger_pressed() void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked) { + ui->cb_unlimited->setEnabled(checked); if(sysPara) { int triggerMode = sysPara->para.printTriggerMode; @@ -371,7 +381,6 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked) ui->pushButtonApplyPulseFix->setEnabled(1); ui->comboBoxSynPrintMode->setEnabled(1); ui->labelSynPrintMode->setEnabled(1); - ui->cb_unlimited->setEnabled (1); ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(0); ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)")); ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫米)")); @@ -396,7 +405,6 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked) ui->pushButtonApplyPulseFix->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); ui->comboBoxSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); ui->labelSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - ui->cb_unlimited->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(1); ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫秒)")); ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫秒)")); @@ -406,7 +414,7 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked) } void PrintSetting::setTriggerUI(int triggerMode){ -// ui->sb_printingDelay->setEnabled(triggerMode == PRINT_TRIGGER_TIME); + ui->sb_printingDelay->setEnabled(triggerMode == PRINT_TRIGGER_TIME); ui->lb_printingDelay->setEnabled(triggerMode == PRINT_TRIGGER_TIME); ui->radioButtonEleEyeEdgetTrigger->setChecked( triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); @@ -414,7 +422,6 @@ void PrintSetting::setTriggerUI(int triggerMode){ ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || triggerMode == PRINT_TRIGGER_TIME); ui->labelEleEyeTriggerIntervalMs->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); ui->spinBoxEleEyeTriggerRepeatCnt->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); - ui->cb_unlimited->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); ui->labelEleEyeTriggerRepeatCnt->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); ui->spinBoxEleEyeTriggerPrintDelay->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || PRINT_TRIGGER_SYNCHRONIZER); ui->labelEleEyeTriggerPrintDelay->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || PRINT_TRIGGER_SYNCHRONIZER); @@ -638,6 +645,9 @@ void PrintSetting::on_eleEyeEdgetTriggerInner_clicked() }else sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; setTriggerUI(sysPara->para.printTriggerMode); + + sysPara->para.eleEyeTriggerSynPrintEn = false; + on_checkEyeTriggerSynPrintEn_clicked(false); } void PrintSetting::setEnableEleEyeSetting(bool flag){ @@ -651,16 +661,19 @@ void PrintSetting::setEnableEleEyeSetting(bool flag){ ui->spinBoxEleMaskTime->setEnabled(flag); ui->labelEleEyeTriggerRepeatCnt->setEnabled(flag); ui->spinBoxEleEyeTriggerRepeatCnt->setEnabled(flag); - ui->cb_unlimited->setEnabled(flag); ui->radioButtonEleEyeEdgetTrigger->setEnabled(flag); ui->radioButtonEleEyeLevelTrigger->setEnabled(flag); + ui->cb_unlimited->setEnabled(flag); + if (!flag) ui->cb_unlimited->setChecked(false); } void PrintSetting::on_eleEyeEdgetTriggerExternal_clicked() { - if (sysPara) - on_checkEyeTriggerSynPrintEn_clicked(sysPara->para.eleEyeTriggerSynPrintEn); + sysPara->para.eleEyeTriggerSynPrintEn = ui->radioButtonSynTriggerExternal->isChecked(); + //电眼和同步器都选外部时,就是同步 + on_checkEyeTriggerSynPrintEn_clicked(sysPara->para.eleEyeTriggerSynPrintEn); + setEnableEleEyeSetting(true); } @@ -674,7 +687,6 @@ void PrintSetting::setEnableSynTriggerSetting(bool flag){ ui->comboBoxSyncActType->setEnabled(flag); ui->labelSynPrintMode->setEnabled(flag); ui->comboBoxSynPrintMode->setEnabled(flag); - ui->cb_unlimited->setEnabled(flag); } void PrintSetting::on_radioButtonSynTriggerInner_clicked() @@ -685,8 +697,11 @@ void PrintSetting::on_radioButtonSynTriggerInner_clicked() sysPara->para.printTriggerMode = PRINT_TRIGGER_TIME; setTriggerUI(sysPara->para.printTriggerMode); } - if (sysPara) - on_checkEyeTriggerSynPrintEn_clicked(sysPara->para.eleEyeTriggerSynPrintEn); + if (sysPara) { + sysPara->para.eleEyeTriggerSynPrintEn = false; + on_checkEyeTriggerSynPrintEn_clicked(false); + } + } @@ -696,8 +711,10 @@ void PrintSetting::on_radioButtonSynTriggerExternal_clicked() if (sysPara) sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; } - if (sysPara) + if (sysPara) { + sysPara->para.eleEyeTriggerSynPrintEn = ui->eleEyeEdgetTriggerExternal->isChecked(); on_checkEyeTriggerSynPrintEn_clicked(sysPara->para.eleEyeTriggerSynPrintEn); + } setEnableSynTriggerSetting(true); } diff --git a/Printsetting.ui b/Printsetting.ui index baf9aad..554f5c0 100644 --- a/Printsetting.ui +++ b/Printsetting.ui @@ -26,7 +26,7 @@ Qt::StrongFocus - 3 + 0 @@ -211,7 +211,7 @@ - + 30 @@ -285,7 +285,7 @@ - + 240 diff --git a/datevarset.ui b/datevarset.ui index 13af6c0..98fe855 100644 --- a/datevarset.ui +++ b/datevarset.ui @@ -61,7 +61,7 @@ - 2 + 1 diff --git a/dialogmaintenancetimesetting.ui b/dialogmaintenancetimesetting.ui index 08a0aed..814df0c 100644 --- a/dialogmaintenancetimesetting.ui +++ b/dialogmaintenancetimesetting.ui @@ -17,7 +17,29 @@ 设置保养间隔 - + QWidget{ + font-size: 16px; +} +QPushButton { + background-color: #5396C1; + color: #ffffff; + border: 1px solid #000000; + border-radius: 3px; + font-size: 18px; + font-weight:500; + height: 30px; + width: 100px; + } + + QPushButton:hover { + background-color: #5396C1; + } + + QPushButton:disabled { + background-color: #7C828E; + color: #606060; + border-color: #808080; + } diff --git a/fileManage/FileManageWidget.cpp b/fileManage/FileManageWidget.cpp index a066db3..24c5b50 100644 --- a/fileManage/FileManageWidget.cpp +++ b/fileManage/FileManageWidget.cpp @@ -25,6 +25,13 @@ FileManageWidget::FileManageWidget(QWidget *parent) : ui->systemFileListView->setProperty("searchPath", DOC_ROOT_DIR); ui->udiskFileListView->setProperty("searchPath", UDISK_DOC_ROOT_DIR); + // 清理ui文件中,用于调试的item + ui->systemFileListView->clear(); + ui->udiskFileListView->clear(); + + ui->systemFileListView->setMouseTracking(true); + ui->udiskFileListView->setMouseTracking(true); + updateUDiskDevList(); m_focusedListView = ui->systemFileListView; @@ -47,7 +54,7 @@ bool FileManageWidget::eventFilter(QObject *watched, QEvent *event) return false; } - if(event->type() != QEvent::FocusIn) { + if(event->type() != QEvent::FocusIn && event->type() != QEvent::MouseMove && event->type() != QEvent::MouseButtonPress) { return false; } @@ -65,7 +72,7 @@ bool FileManageWidget::eventFilter(QObject *watched, QEvent *event) m_focusedListView = dynamic_cast(watched); backgroundPanel = dynamic_cast(watched->parent()); palette = backgroundPanel->palette(); - palette.setColor(backgroundPanel->backgroundRole(), QColor(175, 218, 223)); + palette.setColor(backgroundPanel->backgroundRole(), "#5396C1"); backgroundPanel->setPalette(palette); return false; diff --git a/fileManage/FileManageWidget.ui b/fileManage/FileManageWidget.ui index 990fa32..4e72a02 100644 --- a/fileManage/FileManageWidget.ui +++ b/fileManage/FileManageWidget.ui @@ -77,6 +77,65 @@ + + QScrollBar:vertical { + width: 30px; /* 滚动条宽度 */ + background: #c0c0c0; /* 轨道背景色 */ + margin: 0px; /* 为上下箭头预留空间 */ + border-radius: 4px; /* 整体圆角 */ + +} + + QListWidget QScrollBar::handle:vertical { + background-color: #5396C1; + min-height: 30px; + border-radius: 5px; + border:1px solid rgb(51, 51, 51); + } +/* 如果需要隐藏上下箭头按钮,添加以下代码 */ +QListWidget QScrollBar::sub-line:vertical, +QListWidget QScrollBar::add-line:vertical { + border: none; + background: none; +} + +QComboBox { + border: 1px solid #000000; + border-radius: 3px; + font-size: 14px; + height: 31px; + padding-left: 10px; /* 文字左边距,避免紧贴边缘 */ +} + +/* 下拉箭头区域 */ +QComboBox::drop-down { + border: 1px solid #333333; + border-radius: 3px; + width: 30px; /* 箭头区域宽度 */ + background-color: #5396C1; +} + +/* 下拉箭头图标 */ +QComboBox::down-arrow { + image: url(image/down_white.png); + width: 16px; /* 图标显示宽度 */ + height: 16px; /* 图标显示高度 */ +} + +/* 悬停状态 */ +QComboBox:hover { + background-color: #efefef; +} + +QComboBox QAbstractItemView { + border: 1px solid #000000; + border-radius: 3px; + font-size: 16px; + selection-background-color: #5396C1; /* 选中项背景色(稍深) */ + selection-color: #ffffff; +} + + 0 @@ -280,16 +339,16 @@ - 2 + 1 - 2 + 1 - 2 + 1 - 2 + 1 6 @@ -299,7 +358,7 @@ QListWidget { border: 1px; - padding: 5px; + padding: 3px; } QListWidget::item { @@ -309,6 +368,81 @@ QListWidget::item { QAbstractItemView::MultiSelection + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 0 + + + + + - + + + + + 新建项目 + + + + + 324 + + + + + 45fds + + + + + 2313 + + @@ -324,23 +458,23 @@ QListWidget::item { - 2 + 1 - 2 + 1 - 2 + 1 - 2 + 1 QListWidget { border: 1px; - padding: 5px; + padding: 3px; } QListWidget::item { diff --git a/scene/ScheduleShiftsEditor.cpp b/scene/ScheduleShiftsEditor.cpp index c51b9e6..00b0159 100644 --- a/scene/ScheduleShiftsEditor.cpp +++ b/scene/ScheduleShiftsEditor.cpp @@ -58,6 +58,8 @@ void ScheduleShiftsEditor::setItemModel(QVector schedulesModel, T m_dataModel = schedulesModel; applyDataModel(); + + ui->timeEdit->setTime(QTime(0, 0)); } TextItemModel ScheduleShiftsEditor::textItemModel() @@ -70,11 +72,6 @@ const QVector& ScheduleShiftsEditor::scheduleModel() const return m_dataModel; } -PicScheduleShiftItem *ScheduleShiftsEditor::currEditItem() -{ - return dynamic_cast(m_generalSettings->currentItem()); -} - void ScheduleShiftsEditor::onBtnCloseClicked() { emit rejected(); diff --git a/scene/ScheduleShiftsEditor.h b/scene/ScheduleShiftsEditor.h index 3751a9e..d1cadc8 100644 --- a/scene/ScheduleShiftsEditor.h +++ b/scene/ScheduleShiftsEditor.h @@ -33,16 +33,12 @@ public: explicit ScheduleShiftsEditor(QWidget *parent = nullptr); ~ScheduleShiftsEditor(); - void edit(PicScheduleShiftItem* item); - void setItemModel(QVector schedulesModel, TextItemModel txtModel); TextItemModel textItemModel(); const QVector& scheduleModel() const; - PicScheduleShiftItem* currEditItem(); - signals: void accepted(); void rejected(); diff --git a/scene/pictextitem.cpp b/scene/pictextitem.cpp index fcd0bd7..68ae30a 100644 --- a/scene/pictextitem.cpp +++ b/scene/pictextitem.cpp @@ -467,3 +467,9 @@ TextItemModel TextItemModel::fromItem(PicTextItem *item) } return vm; } + +QString TextItemModel::toString(const TextItemModel &model) +{ + return QString("type: %1, letterSpace: %2, dir: %3, bold: %4, coloReversal: %5") + .arg(model.sourceType).arg(model.letterSpace).arg(model.direction).arg(model.boldMultiple).arg(model.colorReversal); +} \ No newline at end of file diff --git a/scene/pictextitem.h b/scene/pictextitem.h index 965b234..6a65da7 100644 --- a/scene/pictextitem.h +++ b/scene/pictextitem.h @@ -58,6 +58,8 @@ struct TextItemModel { int boldMultiple = 1; int letterSpace = 0; bool colorReversal = false; + QString fontFamily = "Dinkie9"; + int fontSize = 9; std::function imageGenerator; // 图片生成函数 @@ -72,8 +74,9 @@ struct TextItemModel { letterSpace != other.letterSpace || colorReversal != other.colorReversal; } -}; + static QString toString(const TextItemModel& model); +}; class PicTextItem : public QGraphicsTextItem { diff --git a/testprintwidget.cpp b/testprintwidget.cpp index e602e14..8251b21 100644 --- a/testprintwidget.cpp +++ b/testprintwidget.cpp @@ -137,12 +137,8 @@ TestPrintWidget::TestPrintWidget(QWidget* parent) }); // 控制区第一行按钮 - connect(ui.m_btnLeft_Control1, &QPushButton::clicked, [this]() { - emit sendButtonClickedSignal(14); - }); - connect(ui.m_btnRight_Control1, &QPushButton::clicked, [this]() { - emit sendButtonClickedSignal(15); - }); + connect(ui.m_btnLeft_Control1, &QPushButton::clicked, this, &TestPrintWidget::selectPreviousItem); + connect(ui.m_btnRight_Control1, &QPushButton::clicked, this, &TestPrintWidget::selectNextItem); // 方向箭头按钮 connect(ui.m_btnUp, &QPushButton::clicked, [this]() { @@ -221,6 +217,9 @@ TestPrintWidget::TestPrintWidget(QWidget* parent) connect(&m_barcodeEditor, &BarcodeEditor::accepted, this, &TestPrintWidget::slt_BarCodeItemDone); + m_LineEdit->setProperty("Enter replace enter", true); + connect(m_LineEdit, &QLineEdit::returnPressed, this, &TestPrintWidget::onLineEditReturnPressed); + initSelecteCodeDlg(); // 网络通信,暂时屏蔽 @@ -264,106 +263,12 @@ void TestPrintWidget::on_openfileButton_pressed() dialogFileOperation->exec(); } -void TestPrintWidget::on_buttonSelectFont_pressed(){ - - if(dialogFontSize->exec() == QDialog::Accepted){ - int fontSize; - QString fontFamily; - dialogFontSize->getValue(&fontSize); - fontFamily = dialogFontSize->getFontFamily(); - // if(ui->checkBoxBold->isChecked()) - // fontFamily = getFamilyName(fontSize); - // ui->labFontFamily->setText(fontFamily); - #ifdef EnableArabic - bool switchArabicFlag=false; - bool arabicSelect=fontFamily.contains("arabic"); - if((fontFamily=="biyang" || fontFamily=="wenquanyi")&&(fontSize==7 || fontSize==9)){ - switchArabicFlag=true; - emit EnableSwitchArabicFlag(switchArabicFlag); - }else { - emit EnableSwitchArabicFlag(switchArabicFlag); - } - dialogSaveFile->setFileNameEnglishOrArabic(false); - emit fontSizeArabicSelect(arabicSelect); - #endif -// if(sysPara){ -// sysPara->para.fontPixelSize = fontSize; -// } -// ui->labelFontSize->setText(QString::number(fontSize)); - setFontFormat(fontSize,fontFamily); - m_TextEdit->setFocus(); - // emit fontSizeChange(fontSize); -// bool flagBangal=false; -// if(dialogFontSize->getFontFamily() == "bangla") -// flagBangal = true; -// emit switchBengalLanguage(flagBangal); - -// toggleVirtualKeyboard(); - } -} - - -void TestPrintWidget::setFontFormat(int fontsize,QString fontfamily){ - //if(sysPara){ - - //qreal pixelSize = ui->labelFontSize->text().toFloat(); - qreal pixelSize = fontsize; -// if(pixelSize < Public::getMinFontPixelSize()) -// pixelSize = sysPara->para.fontPixelSize; - -// if(pixelSize < Public::getMinFontPixelSize()){ -// pixelSize = Public::getMinFontPixelSize(); -// } - - if (pixelSize >= 0) { - QTextCharFormat fmt; - int DPI = m_TextEdit->logicalDpiX(); - DPI = DPI?DPI:1; - qreal pointSize = pixelSize*72/DPI; //Pixel = DPI * Point / 72 - fmt.setFontPointSize(pointSize); - -#ifdef VNLGXX - QString fontFamily = dialogFontSize->getFontFamily(); - -#else -// QString fontFamily = ui->labFontFamily->text(); - QString fontFamily = fontfamily; - fontFamily = dialogFontSize->getFontFamily(); -// if(ui->checkBoxBold->isChecked()) -// fontFamily = getFamilyName(pixelSize); -// ui->labFontFamily->setText(fontFamily); -#endif - - fmt.setFontFamily(fontFamily); - fmt.setFontWeight(0 && (pixelSize<=16)? QFont::Bold:QFont::Normal); - mergeFormatOnWordOrSelection(fmt); - - } -// } -} - -void TestPrintWidget::mergeFormatOnWordOrSelection(const QTextCharFormat &format) -{ - - QTextCursor cursor = m_TextEdit->textCursor(); - //if (!cursor.hasSelection()) - // cursor.select(QTextCursor::WordUnderCursor); - //cursor.mergeCharFormat(format); - //textEdit->setTextCursor(cursor); - //qDebug()<<"mergeFormatOnWordOrSelection"<mergeCurrentCharFormat(format); -} - - void TestPrintWidget::addDateItem() { - // 将sendButtonClickedSignal(16) 转由专门处理 pPicScene->clearSelection(); - emit sig_showEditDataTime(nullptr); + emit sig_showEditDateTime(DateItemModel::createDefaultReplaceModel(), TextItemModel{}); } - QTextEdit* TestPrintWidget::getQTextEdit(){ return m_TextEdit; } @@ -583,6 +488,11 @@ void TestPrintWidget::getShowSelectItemText(){ if(lastSelectedTxtItem) { + // 对于文本item,将它的文本显示到编辑框 + if(lastSelectedTxtItem->sourceType() == SourceType::TEXT) { + m_LineEdit->setText(lastSelectedTxtItem->source().toString()); + } + QString currItemFontFamily = lastSelectedTxtItem->font().family(); QHash fontNameToIndex; @@ -980,29 +890,6 @@ void TestPrintWidget::parseVbfile(QXmlStreamReader &reader) { } pPictText->setHtml(strCDATA); } - - // if(Condition) - // { - // SpecialVarPrint specialVarPrint; - // specialVarPrint.SpecialVarEnable = Condition; - // specialVarPrint.SpecialVarCountStart = CatchStartValue; - // specialVarPrint.SpecialVarCountEnd = CatchValue; - // specialVarPrint.SpecialVarColStart = 3 + pos_x- pPicScene->itemsBoundingRect().x(); - // specialVarPrint.SpecialVarColEnd = 3 + pos_x - pPicScene->itemsBoundingRect().x()+ pPictText->boundingRect().width(); - // specialVarPrint.SpecialVarRowStart = pos_y - pPicScene->itemsBoundingRect().y(); - // specialVarPrint.SpecialVarRowEnd = pos_y - pPicScene->itemsBoundingRect().y()+ pPictText->boundingRect().height(); - // sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 2022-8-6 - // LogInfo::setRunStatusText(tr("发送特殊变量内容:")); - // LogInfo::setRunStatusText(tr("SpecialVarEnable:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarEnable))); - // LogInfo::setRunStatusText(tr("SpecialVarCountStart:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarCountStart))); - // LogInfo::setRunStatusText(tr("SpecialVarCountEnd:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarCountEnd))); - // LogInfo::setRunStatusText(tr("SpecialVarColStart:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarColStart))); - // LogInfo::setRunStatusText(tr("SpecialVarColEnd:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarColEnd))); - // LogInfo::setRunStatusText(tr("SpecialVarRowStart:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarRowStart))); - // LogInfo::setRunStatusText(tr("SpecialVarRowEnd:%1").arg(QString().sprintf("%02X",specialVarPrint.SpecialVarRowEnd))); - // LogInfo::setRunStatusText(tr("itemsBoundingRect().y():%1").arg(QString().sprintf("%02X",pPicScene->itemsBoundingRect().y()))); - // LogInfo::setRunStatusText(tr("itemsBoundingRect().x():%1").arg(QString().sprintf("%02X",pPicScene->itemsBoundingRect().x()))); - // } Condition= false ; CatchValue = -1; CatchStartValue = -1; @@ -1144,7 +1031,7 @@ bool TestPrintWidget::cacheSelectedLayerForPaste(PicTextItem *srcItem) m_copiedHtml = srcItem->toHtml(); m_copiedSpecialConditions = srcItem->SpecialConditions; m_copiedCatchCnt1StartValue = srcItem->CatchCnt1StartValue; - m_copiedCatchCnt1CurrValue = srcItem->CatchCnt1CurrValue; + m_copiedCatchCnt1CurrValue = srcItem->CatchCnt1CurrValue; m_copiedPos = srcItem->pos(); m_copiedAttrs.clear(); @@ -1370,7 +1257,7 @@ void TestPrintWidget::onBtnItemConfigClicked() if(item->sourceType() == SourceType::DATETIME) { // @see TestPrintWidget::addDateTimeItem auto dateTimeItem = dynamic_cast(item); - emit sig_showEditDataTime(dateTimeItem); + emit sig_showEditDateTime(dateTimeItem->model(), dateTimeItem->textItemModel()); return; } @@ -1403,7 +1290,8 @@ void TestPrintWidget::onItemEditorAccepted() if(itemEditor->currentItem()->source() == SourceType::UNKNOWN) onEditItemCounterDone(); else { - itemEditor->currentItem()->applyModify(); + PicTextItem* textItem = itemEditor->currentItem(); + textItem->applyModify(); } } @@ -1477,6 +1365,106 @@ void TestPrintWidget::slt_QRCodeItemDone(QString str) } } +QGraphicsItem* findClosestItemToViewCenter(QGraphicsView* view) +{ + if (!view || !view->scene()) + return nullptr; + + // 1. 获取视口中心点(视口坐标)并映射到场景坐标 + QPoint viewCenter = view->viewport()->rect().center(); + QPointF sceneCenter = view->mapToScene(viewCenter); + + // 2. 获取场景中所有项 + QList items = view->scene()->items(); + + // 3. 寻找最近项 + QGraphicsItem* closestItem = nullptr; + qreal minDistSq = std::numeric_limits::max(); + + for (QGraphicsItem* item : items) { + // 可选项:跳过不可见项(根据需求决定) + if (!item->isVisible()) continue; + + // 计算项的场景位置到中心点的平方距离(避免开方,性能更好) + QPointF itemPos = item->scenePos(); + qreal dx = itemPos.x() - sceneCenter.x(); + qreal dy = itemPos.y() - sceneCenter.y(); + qreal distSq = dx * dx + dy * dy; + + if (distSq < minDistSq) { + minDistSq = distSq; + closestItem = item; + } + } + + return closestItem; +} + +void TestPrintWidget::selectItemByDirection(bool forward) +{ + auto selectedItems = pPicScene->selectedItems(); + + // 如果当前没有选中项,且场景中存在项,则选择距离当前视图中心的项 + if(selectedItems.isEmpty() && !pPicScene->items().isEmpty()) { + auto closestItem = findClosestItemToViewCenter(pViewer); + if(closestItem) { + closestItem->setSelected(true); + return; + } + } + + if(selectedItems.isEmpty()) + return; + + auto currItem = selectedItems.last(); + if(!currItem) + return; + + auto items = pPicScene->items(); + if(items.size() <= 1) + return; + + std::sort(items.begin(), items.end(), [](QGraphicsItem* a, QGraphicsItem* b) { + return a->pos().x() < b->pos().x(); + }); + + auto it = std::find(items.begin(), items.end(), currItem); + if(it == items.end()) + it = items.begin(); + + QGraphicsItem* nextItem = nullptr; + if(forward) { + nextItem = (it + 1 == items.end()) ? items.first() : *(it + 1); + } else { + nextItem = (it == items.begin()) ? items.last() : *(it - 1); + } + + if(nextItem) { + pPicScene->clearSelection(); + nextItem->setSelected(true); + } +} + +void TestPrintWidget::selectNextItem() +{ + selectItemByDirection(true); +} + +void TestPrintWidget::selectPreviousItem() +{ + selectItemByDirection(false); +} + +void TestPrintWidget::onLineEditReturnPressed() +{ + if(pPicScene->selectedItems().size() != 0) { + qDebug() << "Change current item text"; + } + else { + qDebug() << "Add new item text"; + } +} + void TestPrintWidget::on_cbResolution_currentIndexChanged(int index) { constexpr char* IdxToFontFamily[] = {"WenQuanYi5", @@ -1537,7 +1525,7 @@ void TestPrintWidget::setFontNameIndex(float fontsize) ui.cbResolution->setCurrentIndex(currIndex); } -void TestPrintWidget::addDateTimeItem(const DateItemModel &model) +void TestPrintWidget::addDateTimeItem(const DateItemModel &model, const TextItemModel& textModel) { // 如果当前选中了一个日期时间item,则直接设置模型 auto selectItems = pPicScene->selectedItems(); @@ -1545,6 +1533,7 @@ void TestPrintWidget::addDateTimeItem(const DateItemModel &model) auto item = dynamic_cast(selectItems[0]); if(item->sourceType() == SourceType::DATETIME) { auto dateTimeItem = dynamic_cast(item); + dateTimeItem->setTextItemModel(textModel); dateTimeItem->setModel(model); return; } @@ -1662,15 +1651,21 @@ void TestPrintWidget::onBtnArrowClicked() void TestPrintWidget::on_btn_copy_clicked() { int index = checkSelectScene(); - if (index < 0) return; + if (index < 0) { + qInfo() << "Not selected any item."; + return; + } PicTextItem* srcItem = dynamic_cast(pPicScene->items().at(index)); - if (!srcItem) return; - cacheSelectedLayerForPaste(srcItem); + if (!srcItem) { + qWarning() << "Cannot cast item type to correct type"; + return; + } + cacheSelectedLayerForPaste(srcItem); } void TestPrintWidget::on_btn_paste_clicked() { pasteCopiedLayer(); -} +} \ No newline at end of file diff --git a/testprintwidget.h b/testprintwidget.h index d6c8f5a..ea282c2 100644 --- a/testprintwidget.h +++ b/testprintwidget.h @@ -72,7 +72,7 @@ public: void setFontNameIndex(float); - void addDateTimeItem(const DateItemModel& model); + void addDateTimeItem(const DateItemModel& model, const TextItemModel& textModel); void addScheduleShiftsItem(QVector schedules, TextItemModel txtModel); @@ -102,6 +102,13 @@ public slots: void slt_BarCodeItemDone(); void slt_QRCodeItemDone(QString str); + + void selectNextItem(); + + void selectPreviousItem(); + + void onLineEditReturnPressed(); + protected: // 重写事件过滤器 bool eventFilter(QObject *watched, QEvent *event) override; @@ -184,7 +191,6 @@ private: //寻找当前选中的图层,没有选中的就不继续处理 int checkSelectScene(); - // 复制 int pasteTime = 1; SourceType m_copiedSourceType = SourceType::UNKNOWN; @@ -201,22 +207,25 @@ private: QPointF m_copiedPos; //判断要复制什么图层,添加该图层 PicTextItem* checkSelectItem(PicTextItem* srcItem); + //保存复制内容 bool cacheSelectedLayerForPaste(PicTextItem* srcItem); + //粘贴 void pasteCopiedLayer(); + void selectItemByDirection(bool forward); + signals: void sendButtonClickedSignal(int index); void sendUpdateFontSignl(int); void sig_showEditCounter(CounterViewModel viewModel); - // 用户请求打开日期类型图元编辑窗口时发送此信号, - // 如果item为null,表明是从新建按钮发出的,如果item不为null,表明用户正在尝试编辑一个日期item - void sig_showEditDataTime(PicDateItem* item); + // 用户请求打开日期类型图元编辑窗口时发送此信号 + void sig_showEditDateTime(DateItemModel dateModel, TextItemModel textModel); void sig_showScheduleShiftsEditor(QVector schedules, TextItemModel txtModel); }; -#endif // TESTPRINTWIDGET_H +#endif // TESTPRINTWIDGET_H \ No newline at end of file