V6.7.5_beta

This commit is contained in:
2026-07-22 11:47:13 +08:00
parent e90e80000f
commit 50c4999d90
26 changed files with 798 additions and 743 deletions
+99 -199
View File
@@ -2,7 +2,6 @@
#include <QDebug>
#include <QIcon>
#include <QFile>
#include <iostream>
#include <string>
#include <unistd.h>
#include <QMessageBox>
@@ -45,14 +44,7 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
// m_ButtonGroup->addButton(ui.btnList, 7);
dialogSaveFile =new DialogSaveFile(0);
connect(dialogSaveFile,SIGNAL(returnMainWidget(int)),this,SIGNAL(sendButtonClickedSignal(int)));
dialogFileOperation = new DialogFileOperation(0);
connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool)));
m_CreateImageFlag = false;
m_pSavePicScene = new QGraphicsScene();
m_pSavePicScene->setSceneRect(QRectF(0, 0, 3200, MAX_PRINT_ROW_NUM)); //生成图片的场景
// connect(dialogSaveFile,SIGNAL(returnMainWidget(int)),this,SIGNAL(sendButtonClickedSignal(int)));
editMode = SCENE;
@@ -99,8 +91,13 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
connect(ui.btnSave, &QPushButton::clicked, this, &TestPrintWidget::on_saveButton_pressed);
connect(ui.btnListConfig, &QPushButton::clicked, [this]() {
if(m_printSetting) {
m_printSetting->setModel(m_printSettingModel);
}
emit sendButtonClickedSignal(9);
});
});
connect(ui.btnItemConfig, &QPushButton::clicked, this, &TestPrintWidget::onBtnItemConfigClicked);
@@ -158,12 +155,23 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
vm.counterType = COUNTER_TYPE_1;
vm.digitalNum = 2;
vm.letterSpace = ls;
vm.cnt1Settings = m_printSettingModel.cnt1Settings;
vm.cnt2Settings = m_printSettingModel.cnt2Settings;
emit sig_showEditCounter(vm);
});
connect(ui.btnBarcode, &QPushButton::clicked, [this](){
pPicScene->clearSelection();
showBarcodeEditor();
BarcodeViewModel vm;
vm.generalSettingsVM = TextItemModel();
vm.contentPattern = "";
vm.counterViewModel = CounterViewModel();
vm.dateViewModel = DateItemModel::createDefaultReplaceModel();
vm.type = BARCODE_TYPE_BARCODE;
vm.format.setValue(DlgBarcodeFormatVM());
vm.counterViewModel.cnt1Settings = m_printSettingModel.cnt1Settings;
vm.counterViewModel.cnt2Settings = m_printSettingModel.cnt2Settings;
showBarcodeEditor(vm);
});
// X,Y label connection
@@ -177,13 +185,15 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0);
connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool)), Qt::DirectConnection);
dialogSaveFile->saveLastWork();
emit sig_updatePrintContent();
} else {
dialogFileOperation->openLastWork();
if(xmlfileName.isEmpty()) {
on_saveButton_pressed();
} else {
saveFile();
}
emit sig_updatePrintContent(xmlfileName);
}
emit sendButtonClickedSignal(20);
});
@@ -197,7 +207,6 @@ 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);
m_LineEdit->installEventFilter(this);
@@ -208,20 +217,12 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
void TestPrintWidget::bindSysPara(SysPara *sysPara)
{
this->sysPara = sysPara;
// 它需要这个
m_barcodeEditor.bindSysPara(sysPara);
}
TestPrintWidget::~TestPrintWidget()
{
m_LineEdit->removeEventFilter(this);
if(m_pSavePicScene)
{
delete m_pSavePicScene;
m_pSavePicScene = nullptr;
}
if(m_TextEdit){
delete m_TextEdit;
m_TextEdit = nullptr;
@@ -234,30 +235,6 @@ TestPrintWidget::~TestPrintWidget()
}
void TestPrintWidget::loadLastWork()
{
if (dialogFileOperation) {
dialogFileOperation->openLastWork();
}
}
QPixmap TestPrintWidget::loadIcon(const QString& iconName, const QSize& size)
{
QString iconPath = QString(":/icons/res/icons/%1.png").arg(iconName);
QPixmap pixmap(iconPath);
return pixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
}
void TestPrintWidget::on_openfileButton_pressed()
{
pPicScene->clearSelection();
pPicScene->clearFocus();
if (dialogFileOperation) {
dialogFileOperation->refreshListView(editMode);
dialogFileOperation->exec();
}
}
void TestPrintWidget::addDateItem()
{
pPicScene->clearSelection();
@@ -289,7 +266,6 @@ void TestPrintWidget::on_enlargeButton_pressed()
void TestPrintWidget::on_addButton_pressed(const SourceType type)
{
addItemFlag = false;
m_LineEdit->setEnabled(true);
m_LineEdit->setText("");
pPicScene->clearSelection();
@@ -308,8 +284,6 @@ void TestPrintWidget::on_addButton_pressed(const SourceType type)
// ui->saveButton->setEnabled(true);
textItem->setPlainText("");
textItem->setSelected(true);
addItemFlag = true;
}
void TestPrintWidget::onEditItemDone()
@@ -395,137 +369,71 @@ void TestPrintWidget::getShowSelectItemText()
void TestPrintWidget::on_saveButton_pressed()
{
pPicScene->clearSelection();
if(xmlfileName.isEmpty() || xmlfileName.contains("LastWork.xml"))
if(xmlfileName.isEmpty())
{
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)), Qt::DirectConnection);
dialogSaveFile->refreshListView(editMode);
dialogSaveFile->show();
dialogSaveFile->refreshListView(SCENE);
dialogSaveFile->setEnterFileName("");
auto ret = dialogSaveFile->exec();
if(ret == QDialog::Accepted) {
auto filename = dialogSaveFile->filename();
if(!filename.endsWith(".xml",Qt::CaseInsensitive))
filename += ".xml";
saveFile(filename);
}
#endif
}
else
{
pPicScene->update();
saveFile();
if(sysPara){
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());
// ui->saveButton->setEnabled(false);
// emit fileNameChanged(QFileInfo(xmlfileName).fileName());
}
}
void TestPrintWidget::saveFile()
void TestPrintWidget::saveFile(const QString& filename)
{
if (m_printSetting) {
auto model = m_printSetting->model();
PicSceneLoader::saveSceneToXmlFile(xmlfileName, pPicScene, &model);
} else {
PicSceneLoader::saveSceneToXmlFile(xmlfileName, pPicScene, nullptr);
}
auto fn = filename.isEmpty() ? xmlfileName : filename;
PicSceneLoader::saveSceneToXmlFile(fn, pPicScene, &m_printSettingModel);
}
void TestPrintWidget::onSaveASFile(QString filename,bool Flag){// use for dialogSaveFile class
void TestPrintWidget::onSaveASFile(QString filename,bool Flag)
{// use for dialogSaveFile class
qDebug()<<filename;
xmlfileName = filename;
if(!filename.endsWith(".xml",Qt::CaseInsensitive))
xmlfileName += ".xml";
saveFile();
if(sysPara){
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());
// ui->saveButton->setEnabled(false);
// emit fileNameChanged(QFileInfo(xmlfileName).fileName());
}
/*
* 和DialogFileOperation对接
* */
void TestPrintWidget::onFileOpen(QString filePath,bool reviewFlag){
void TestPrintWidget::openWorkFile(QString filePath){
if(editMode != SCENE || !filePath.endsWith(".xml")) {
return;
}
if(reviewFlag) {
xmlfileName = filePath;
}
pViewer->viewport()->update();
unsigned char SpecialVarEnable = 0;
if (sysPara) {
sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1);
}
PrintSettingModel loadedPrintSetting;
bool ok = PicSceneLoader::loadSceneFromFile(filePath,
pPicScene,
reviewFlag ? &loadedPrintSetting : nullptr);
bool ok = PicSceneLoader::loadSceneFromFile(filePath, pPicScene, &m_printSettingModel);
if(!ok) {
qWarning() << "Failed to load file:" << filePath;
return;
}
if(reviewFlag && m_printSetting) {
m_printSetting->setModel(loadedPrintSetting);
m_printSetting->applyPrintSettingsToSysPara(false);
xmlfileName = filePath;
if(m_printSetting) {
m_printSetting->setModel(m_printSettingModel);
}
if(sysPara)
{
sysPara->sysFile = filePath;
sysPara->loadParaFromFile();
snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toLatin1().constData());
}
// 主动暂停打印
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); //打开文件完成跳转到主窗口
}
void TestPrintWidget::addCodeItem(QString str)
{
addItemFlag = false;
m_LineEdit->setEnabled(true);
m_LineEdit->setText("");
pPicScene->clearSelection();
codeItem_Operation = new PicCodeItem(0, 0, SourceType::CODE);
codeItem_Operation->setSource(str);
pPicScene->addItem(codeItem_Operation);
QList<QGraphicsItem *> items = pPicScene->items();
if(pPicScene->items().count()>1){
QRectF itemRect= items.at(1)->boundingRect();
codeItem_Operation->setPos( items.at(1)->scenePos().x()+itemRect.width()+20, items.at(1)->scenePos().y());
}
else
codeItem_Operation->setPos(this->pViewer->mapToScene(0,0));//edit@12-07
codeItem_Operation->setPlainText("");
codeItem_Operation->setSelected(true);
addItemFlag = true;
qDebug() << "xmlfileName:" << xmlfileName;
}
int TestPrintWidget::checkSelectScene()
@@ -713,26 +621,14 @@ void TestPrintWidget::setPrintSettingWidget(PrintSetting *wid)
m_printSetting = wid;
connect(m_printSetting, &PrintSetting::sendButtonClickedSignal, this, [this](int i) {
if(i == 2) {
saveFile();
LogInfo::setRunStatusText("Save print setting.");
if(i == 2 && !m_printSetting->isDefaultSettingMode()) {
m_printSettingModel = m_printSetting->model();
}
});
}
bool TestPrintWidget::eventFilter(QObject *watched, QEvent *event) {
// 只处理 graphicsView 的事件
if (watched == ui.graphicsView) {
// 处理鼠标点击事件
if (event->type() == QEvent::MouseButtonPress) {
std::cout<<"MouseButtonPress"<<std::endl;
// 返回 true 表示事件已处理,不再传递
// 返回 false 表示继续传递事件
return false; // 通常让事件继续传递,以便Item也能收到事件
}
}
bool TestPrintWidget::eventFilter(QObject *watched, QEvent *event)
{
if(watched == m_LineEdit) {
if(event->type() == QEvent::FocusOut) {
onEditItemDone();
@@ -807,6 +703,8 @@ void TestPrintWidget::onBtnItemConfigClicked()
vm.letterSpace = counterItem->letterSpace();
vm.enbCustomCharWidth = false;
vm.charWidth = counterItem->charWidth();
vm.cnt1Settings = m_printSettingModel.cnt1Settings;
vm.cnt2Settings = m_printSettingModel.cnt2Settings;
emit sig_showEditCounter(vm);
}
return;
@@ -843,8 +741,10 @@ void TestPrintWidget::onBtnItemConfigClicked()
if(!codeItem)
return;
m_barcodeEditor.bindViewModel(codeItem->barcodeViewModel());
showBarcodeEditor(false);
auto vm = codeItem->barcodeViewModel();
vm.counterViewModel.cnt1Settings = m_printSettingModel.cnt1Settings;
vm.counterViewModel.cnt2Settings = m_printSettingModel.cnt2Settings;
showBarcodeEditor(vm);
return;
}
@@ -884,46 +784,51 @@ void TestPrintWidget::on_newfileButton_pressed()
xmlfileName = "";
if (sysPara) {
PrintSettingModel defModel = PrintSettingModel::defPrintSettingModel();
PrintSettingModel::applyToSysPara(defModel, sysPara);
m_printSettingModel = PrintSettingModel::defPrintSettingModel();
if(m_printSetting)
m_printSetting->setModel(defModel);
m_printSetting->setModel(m_printSettingModel);
}
sendButtonClickedSignal(21); //新建文件完成
emit sig_currentFileChanged();
}
void TestPrintWidget::slt_BarCodeItemDone()
{
auto vm = m_barcodeEditor.viewModel();
// 如果当前选中了一个条形码或二维码,则更新其内容,然后直接返回
bool flag = false;
auto selectedItem = pPicScene->selectedItems();
for(auto item : selectedItem) {
auto codeItem = dynamic_cast<PicCodeItem*>(item);
if(codeItem) {
codeItem->setBarcodeViewModel(vm);
flag = true;
}
}
if(flag)
return;
if(vm.contentPattern.isEmpty()) {
qInfo() << "Empty content pattern, the barcode will not be generated.";
return;
}
// 添加条形码或验证码
pPicScene->clearSelection();
PicCodeItem* item = new PicCodeItem(0, 0, SourceType::CODE);
item->setBarcodeViewModel(vm);
auto boundingRect = pPicScene->itemsBoundingRect();
pPicScene->addItem(item);
item->setPos(boundingRect.right(), 0.0);
item->setSelected(true);
PicCodeItem* codeItem = nullptr;
// 如果当前选中了一个条形码或二维码,则更新其内容,然后直接返回
bool flag = false;
auto selectedItem = pPicScene->selectedItems();
for(auto item : selectedItem) {
codeItem = dynamic_cast<PicCodeItem*>(item);
if(codeItem)
break;
}
if(!codeItem) {
// 添加条形码或二维码
pPicScene->clearSelection();
codeItem = new PicCodeItem(0, 0, SourceType::CODE);
auto boundingRect = pPicScene->itemsBoundingRect();
pPicScene->addItem(codeItem);
codeItem->setPos(boundingRect.right(), 0.0);
}
codeItem->setBarcodeViewModel(vm);
codeItem->setSelected(true);
m_printSettingModel.cnt1Settings = vm.counterViewModel.cnt1Settings;
m_printSettingModel.cnt2Settings = vm.counterViewModel.cnt2Settings;
if(m_printSetting)
m_printSetting->setModel(m_printSettingModel);
}
QGraphicsItem* findClosestItemToViewCenter(QGraphicsView* view)
@@ -1017,16 +922,6 @@ 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",
@@ -1147,6 +1042,9 @@ void TestPrintWidget::addCounterItem(CounterViewModel vm, QSharedPointer<QFont>
if(vm.enbCustomCharWidth) {
counterItem->setCharWidth(vm.charWidth);
}
m_printSettingModel.cnt1Settings = vm.cnt1Settings;
m_printSettingModel.cnt2Settings = vm.cnt2Settings;
}
return;
}
@@ -1167,6 +1065,9 @@ void TestPrintWidget::addCounterItem(CounterViewModel vm, QSharedPointer<QFont>
if(vm.enbCustomCharWidth) {
item->setCharWidth(vm.charWidth);
}
m_printSettingModel.cnt1Settings = vm.cnt1Settings;
m_printSettingModel.cnt2Settings = vm.cnt2Settings;
}
QString TestPrintWidget::currentFile()
@@ -1174,14 +1075,13 @@ QString TestPrintWidget::currentFile()
return xmlfileName;
}
void TestPrintWidget::showBarcodeEditor(bool restoreViewModel)
void TestPrintWidget::showBarcodeEditor(const BarcodeViewModel& vm)
{
#if defined(ARCH_AARCH64)
m_barcodeEditor.setWindowState(Qt::WindowFullScreen);
#endif
if(restoreViewModel)
m_barcodeEditor.restoreViewModel();
m_barcodeEditor.bindViewModel(vm);
m_barcodeEditor.setWindowModality(Qt::WindowModal);
m_barcodeEditor.show();
}