2026年6月25日 暂存

This commit is contained in:
2026-06-25 11:04:34 +08:00
parent 0fb69c2897
commit 864b60020e
32 changed files with 6806 additions and 5974 deletions
+26 -296
View File
@@ -20,9 +20,7 @@
#pragma execution_character_set("utf-8")
extern unsigned char vartypeR;
//extern QMap<int,QStringList> replaceValueMap;
extern QMap<int,QMap<int,QString>> replaceValueMap;
TestPrintWidget::TestPrintWidget(QWidget* parent)
: QWidget(parent)
{
@@ -45,8 +43,6 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
m_ButtonGroup->addButton(ui.btnArrow, 6);
// m_ButtonGroup->addButton(ui.btnList, 7);
dialogFontSize = new DialogFontSize(0);
dialogSaveFile =new DialogSaveFile(0);
dialogFileOperation = new DialogFileOperation(0);
@@ -56,13 +52,10 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
m_pSavePicScene->setSceneRect(QRectF(0, 0, 3200, MAX_PRINT_ROW_NUM)); //生成图片的场景
editMode = SCENE;
// 窗口基础设置(UI文件已配置,此处可保留或移除)
setWindowTitle("Testprint");
resize(800, 600);
// setStyleSheet("QWidget { font-family: Arial; font-size: 12px; }");
m_TextEdit = new QTextEdit(0);
m_TextEdit->setLineWrapMode(QTextEdit::NoWrap);
// 获取文档并设置边距为0
m_TextEdit->document()->setDocumentMargin(0);
QFont font;
@@ -79,14 +72,11 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
// ui->senceEditOption->bindScene(pPicScene, ui->graphicsView, ui->textEdit);
this->pPicScene->setIsdrawBackground(true);
// 哪个天才写的?拿view和scene计算一下会死吗?
for(int i=0;i<3;i++){
on_enlargeButton_pressed();
}
// connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool)));
// ui.graphicsView->installEventFilter(this);
connect(pPicScene,&PicScene::selectionChanged,this,[=]() {
getShowSelectItemText();
});
@@ -114,10 +104,6 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
connect(ui.btnListConfig, &QPushButton::clicked, [this]() {
emit sendButtonClickedSignal(9);
});
// connect(ui.btnAConfig, &QPushButton::clicked, [this]() {
// emit sendButtonClickedSignal(10);
// // on_buttonSelectFont_pressed();
// });
connect(ui.btnItemConfig, &QPushButton::clicked, this, &TestPrintWidget::onBtnItemConfigClicked);
@@ -127,15 +113,6 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
on_delButton_pressed();
});
// 分辨率下拉框(保留原空逻辑)
// mei le
// 地区下拉框(保留原空逻辑)
connect(ui.cbLocale, QOverload<int>::of(&QComboBox::currentIndexChanged),
[=](int index) {
//qDebug() << "选择地区:" << ui.cbLocale->currentText();
});
// 控制区第一行按钮
connect(ui.m_btnLeft_Control1, &QPushButton::clicked, this, &TestPrintWidget::selectPreviousItem);
connect(ui.m_btnRight_Control1, &QPushButton::clicked, this, &TestPrintWidget::selectNextItem);
@@ -220,8 +197,6 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
m_LineEdit->setProperty("Enter replace enter", true);
connect(m_LineEdit, &QLineEdit::returnPressed, this, &TestPrintWidget::onLineEditReturnPressed);
initSelecteCodeDlg();
// 网络通信,暂时屏蔽
// ui.btnList->hide();
}
@@ -284,6 +259,8 @@ void TestPrintWidget::on_enlargeButton_pressed()
// qDebug() << pViewer->devicePixelRatioFScale();
// qDebug() << pViewer->devicePixelRatioF();
// pViewer->scale(scaleFactor, scaleFactor);
// TODO:: 保留,以后真的要用到放大缩小
((MyView*)pViewer)->ZoomOut();
}
@@ -291,7 +268,6 @@ void TestPrintWidget::on_addButton_pressed(const SourceType type)
{
addItemFlag = false;
m_LineEdit->setEnabled(true);
m_TextEdit->clear();
m_LineEdit->setText("");
pPicScene->clearSelection();
textItem = new PicTextItem(0, 0, type);
@@ -310,172 +286,29 @@ void TestPrintWidget::on_addButton_pressed(const SourceType type)
textItem->setPlainText("");
textItem->setSelected(true);
if(varReplaceItemMap.size()>0){
QMap<int, ItemReplaceInfo> newMap;
for (auto it = varReplaceItemMap.begin(); it != varReplaceItemMap.end(); ++it) {
newMap.insert(it.key() + 1, it.value()); // key直接+1
}
varReplaceItemMap = newMap; // 原子替换
}
addItemFlag = true;
}
void TestPrintWidget::onEditItemDone()
{
//Scene Test
QList<QGraphicsItem *> items=pPicScene->items();
int index=0;
bool flag = false;
for(int i=0;i<items.size();i++){
index=i;
if(items.at(i)->isSelected()){
flag = true;
break;
}
}
QString content = m_LineEdit->text();
m_TextEdit->setText(content);
if(!flag){
return;
}
if(!m_TextEdit->toHtml().contains("<img src=")){
QString content = m_LineEdit->text();
m_TextEdit->clear();
m_TextEdit->setText(content);
}
const QString content = m_LineEdit->text();
foreach (QGraphicsItem *item, pPicScene->selectedItems())
{
PicTextItem *pTextItem = (PicTextItem *)item;
QFont font = pTextItem->font();
font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace);
font.setStyleStrategy(QFont::NoAntialias);
pTextItem->setLetterSpace(sysPara->para.textEditCharSpace);
pTextItem->setFont(font);
m_TextEdit->setFont(font);
createItemImage();
QString html = "<img src=\"/home/plg/doc/scene.png\" />";
m_TextEdit->setHtml(html);
pTextItem->setHtml(m_TextEdit->toHtml());
pTextItem->setSource(content);
if(pTextItem->sourceType() == SourceType::TEXT)
pTextItem->setSource(content);
}
}
void TestPrintWidget::onEditItemCounterDone(){
//Scene Test
QList<QGraphicsItem *> items=pPicScene->items();
int index = checkSelectScene();
if (index < 0) return;
QString html = m_TextEdit->toHtml();
// 计数器1、2的source值 image path: "/7/7...."
QString source = html.contains("7/7")? SOURCE_COUNTER1 : SOURCE_COUNTER2;
foreach (QGraphicsItem *item, pPicScene->selectedItems())
{
PicTextItem *pTextItem = (PicTextItem *)item;
QFont font = pTextItem->font();
font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace);
font.setStyleStrategy(QFont::NoAntialias);
pTextItem->setFont(font);
pTextItem->setSource(source);
if(!m_TextEdit->toHtml().contains("<img src=")){
//把当前内容保存为图片
createItemImage();
//将图片设置到编辑器里
QString html = "<img src=\"/home/plg/doc/scene.png\" />";
m_TextEdit->setHtml(html);
}
pTextItem->setHtml(m_TextEdit->toHtml());
}
}
void TestPrintWidget::onReplaceVarEditDone()
{
//Scene Test
QList<QGraphicsItem *> items=pPicScene->items();
int index=0;
for(int i=0;i<items.size();i++){
index=i;
if(items.at(i)->isSelected()){
break;
}
}
foreach (QGraphicsItem *item, pPicScene->selectedItems())
{
if(item)
{
PicTextItem *pTextItem = (PicTextItem *)item;
QFont font = pTextItem->font();
// font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace);
pTextItem->setFont(font);
if(!m_TextEdit->toHtml().contains("<img src=")){
createItemImage();
QString html = "<img src=\"/home/plg/doc/scene.png\" />";
m_TextEdit->setHtml(html);
}
// std::cout<<"m_TextEdit:"<<m_TextEdit->toHtml().toStdString()<<std::endl;
pTextItem->setHtml(m_TextEdit->toHtml());
}
}
}
void TestPrintWidget::createItemImage()
{
int coldot = (int)m_TextEdit->document()->size().width();
QSize size(coldot,20);
// doc->adjustSize();
// QSize docSize = doc->size().toSize();
m_TextEdit->document()->adjustSize(); // 或 m_TextEdit->document()->size().toSize();
m_TextEdit->adjustSize();
QSize docSize = m_TextEdit->document()->size().toSize();
QImage image(docSize,QImage::Format_ARGB32);
// image.fill(0x00ffffff);//填充白色
image.fill(Qt::transparent);
QPainter painter(&image);
m_TextEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/
image.save("/home/plg/doc/scene.png");
}
void TestPrintWidget::getShowSelectItemText()
{
//Scene Test
QList<QGraphicsItem *> items=pPicScene->items();
int index=0;
bool flag = false;
for(int i=0;i<items.size();i++){
index=i;
if(items.at(i)->isSelected()){
flag = true;
break;
}
}
if(flag){
if(varReplaceItemMap.contains(index) && addItemFlag){
ui.m_LineEdit->setEnabled(false);
ui.m_LineEdit->setText("{t}");
return;
}
else
ui.m_LineEdit->setEnabled(true);
}else{
ui.m_LineEdit->setEnabled(false);
ui.m_LineEdit->setText("");
return;
}
ui.m_LineEdit->setEnabled(false);
ui.m_LineEdit->setText("");
// 选择最后一个被选中的 item,防一手而已,事实上不应允许多选
// 直接选第一个被选中的 item,也是可以的
auto selectedItems = pPicScene->selectedItems();
PicTextItem* lastSelectedTxtItem = nullptr;
@@ -492,6 +325,7 @@ void TestPrintWidget::getShowSelectItemText()
// 对于文本item,将它的文本显示到编辑框
if(lastSelectedTxtItem->sourceType() == SourceType::TEXT) {
ui.m_LineEdit->setEnabled(true);
m_LineEdit->setText(lastSelectedTxtItem->source().toString());
}
@@ -512,9 +346,11 @@ void TestPrintWidget::getShowSelectItemText()
return;
}
// 锁住信号再设置,避免设置后触发 cbResolution 的信号
auto b = ui.cbResolution->blockSignals(true);
ui.cbResolution->setCurrentIndex(fontNameToIndex[currItemFontFamily]);
ui.cbResolution->blockSignals(b);
return;
}
@@ -717,14 +553,6 @@ void TestPrintWidget::onFileOpen(QString filePath,bool insertFlag){
//qDebug()<<"textedit txt mode onFileOpen" << sysPara->sysFile;
snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toLatin1().constData());
}
// emit fileNameChanged(QFileInfo(xmlfileName).fileName());
// ui->saveButton->setEnabled(false);
QList<QGraphicsItem *> items = pPicScene->items();
foreach (QGraphicsItem *item, items) {
PicTextItem *picText = qgraphicsitem_cast<PicTextItem*>(item);
onSceneAccepted(picText);
}
}
}
@@ -914,54 +742,10 @@ void TestPrintWidget::parseVbfile(QXmlStreamReader &reader) {
}
}
void TestPrintWidget::onSceneAccepted(PicTextItem *pTextItem){
//dialogLineSpace->getValue(&sysPara->para.textEditLineSpace,&sysPara->para.textEditCharSpace);
for(QTextBlock textBlock = pTextItem->document()->begin();textBlock != pTextItem->document()->end(); textBlock = textBlock.next()){
// textBlock.setVisible(false);
QTextBlockFormat textBlockFormat = textBlock.blockFormat();
textBlockFormat.setAlignment(Qt::AlignTop);
textBlockFormat.setTopMargin(-1);
//textBlockFormat.setLineHeight(sysPara->para.fontPixelSize + sysPara->para.textEditLineSpace, QTextBlockFormat::FixedHeight);
//textBlockFormat.setLineHeight(0, QTextBlockFormat::LineDistanceHeight);
textBlockFormat.setBottomMargin(sysPara->para.textEditLineSpace-1);
//textBlockFormat.setBottomMargin(-1);
QTextCursor textCursor = pTextItem->textCursor();
textCursor.setPosition(textBlock.position());
textCursor.setBlockFormat(textBlockFormat);
pTextItem->setTextCursor(textCursor);
}
// QTextCharFormat fmt;
// //fmt.setFontWordSpacing(sysPara->para.textEditCharSpace);
// fmt.setFontLetterSpacing(sysPara->para.textEditCharSpace); qDebug() << sysPara->para.textEditCharSpace;
// mergeFormatOnWordOrSelection(fmt);
// pTextItem->setLetterSpace(sysPara->para.textEditCharSpace);
sysPara->saveParaToFile();
}
void TestPrintWidget::initSelecteCodeDlg()
{
m_SelectCodeDlg = new SelectCodeDlg(this);
connect(m_SelectCodeDlg, &SelectCodeDlg::sig_cancelEdit, this, [=]() {
m_SelectCodeDlg->close();
} );
connect(m_SelectCodeDlg, &SelectCodeDlg::sig_editBarCode, this, [=]() {
m_SelectCodeDlg->close();
emit sendButtonClickedSignal(201);
} );
connect(m_SelectCodeDlg, &SelectCodeDlg::sig_editQRCode, this, [=]() {
m_SelectCodeDlg->close();
emit sendButtonClickedSignal(202);
} );
}
void TestPrintWidget::addCodeItem(QString str)
{
addItemFlag = false;
m_LineEdit->setEnabled(true);
m_TextEdit->clear();
m_LineEdit->setText("");
pPicScene->clearSelection();
codeItem_Operation = new PicCodeItem(0, 0, SourceType::CODE);
@@ -1163,22 +947,7 @@ void TestPrintWidget::on_delButton_pressed()
foreach (QGraphicsItem *item, pPicScene->selectedItems()) {
pPicScene->removeItem(item);
delete item;
// ui->saveButton->setEnabled(true);
}
if(varReplaceItemMap.size()>0){
QMap<int, ItemReplaceInfo> newMap;
for (auto it = varReplaceItemMap.begin(); it != varReplaceItemMap.end(); ++it) {
int oldKey = it.key();
if (oldKey == index) {
continue; // 跳过删除项
}
int newKey = (oldKey > index) ? oldKey - 1 : oldKey;
newMap.insert(newKey, it.value());
}
varReplaceItemMap = newMap;
}
}
bool TestPrintWidget::eventFilter(QObject *watched, QEvent *event) {
@@ -1246,9 +1015,6 @@ void TestPrintWidget::onBtnItemConfigClicked()
// 如果是日期类型,则唤醒DateVarSet
if(item->data(0).toString() == "datetime") {
// @see TestPrintWidget::addDateItem
vartypeR = 0x00;
replaceValueMap.clear();
m_TextEdit->clear();
emit sendButtonClickedSignal(16);
return;
}
@@ -1290,8 +1056,9 @@ void TestPrintWidget::onBtnItemConfigClicked()
void TestPrintWidget::onItemEditorAccepted()
{
if(itemEditor->currentItem()->source() == SourceType::UNKNOWN)
onEditItemCounterDone();
if(itemEditor->currentItem()->source() == SourceType::UNKNOWN) {
// Nothing....
}
else {
PicTextItem* textItem = itemEditor->currentItem();
textItem->applyModify();
@@ -1310,7 +1077,9 @@ void TestPrintWidget::on_newfileButton_pressed(){
pPicScene->clear();
pViewer->viewport()->update();
xmlfileName = "";
QFile file(xmlfileName);
// TODO:: 新建文件的入口
sendButtonClickedSignal(21); //新建文件完成
}
@@ -1347,27 +1116,6 @@ void TestPrintWidget::slt_BarCodeItemDone()
item->setSelected(true);
}
void TestPrintWidget::slt_QRCodeItemDone(QString str)
{
if (editCodeFlag) {
on_delButton_pressed();
editCodeFlag = false;
}
addCodeItem(str);
m_TextEdit->clear();
int index = checkSelectScene();
if (index == -1) return;
QString html = m_TextEdit->toHtml();
foreach (QGraphicsItem *item, pPicScene->selectedItems())
{
PicCodeItem *pItem = (PicCodeItem *)item;
pItem->setHtml(html);
}
}
QGraphicsItem* findClosestItemToViewCenter(QGraphicsView* view)
{
if (!view || !view->scene())
@@ -1506,29 +1254,6 @@ void TestPrintWidget::on_cbResolution_currentIndexChanged(int index)
}
}
void TestPrintWidget::setFontNameIndex(float fontsize)
{
int currIndex=0;
if(fontsize <=5 ){ //5dot -- 3.75pt
currIndex = 0;
}else if(fontsize<=7){ //7dot -- 5.25pt
currIndex = 1;
}else if(fontsize<=9){ //9dot -- 6.75
currIndex = 2;
}else if(fontsize<=12){ //12dot -- 9pt
currIndex = 3;
}else if(fontsize<=16){ //16dot -- 12pt
currIndex = 4;
}else if(fontsize<=24){ //24dot -- 18pt
currIndex = 5;
}else if(fontsize<=32){ //32dot -- 24pt
currIndex = 6;
}
if(currIndex<ui.cbResolution->count())
ui.cbResolution->setCurrentIndex(currIndex);
}
void TestPrintWidget::addDateTimeItem(const DateItemModel &model, const TextItemModel& textModel)
{
// 如果当前选中了一个日期时间item,则直接设置模型
@@ -1634,6 +1359,11 @@ void TestPrintWidget::addCounterItem(CounterViewModel vm, QSharedPointer<QFont>
}
}
QString TestPrintWidget::currentFile()
{
return xmlfileName;
}
void TestPrintWidget::showBarcodeEditor(bool restoreViewModel)
{
#if defined(ARCH_AARCH64)