#include "TextEditOption.h" #include "ui_texteditoption.h" #include "PicWidget.h" #include "scene/picscene.h" #include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #include #include #include #include #include #include "Public.h" #include "myinclude.h" #include "QBarCode.h" #include "dlgQrCode.h" #include #include TextEditOption::TextEditOption(QWidget *parent) : QWidget(parent), ui(new Ui::TextEditOption) { ui->setupUi(this); fileDialog = 0; fileName = ""; textEdit = 0; newFileAppending = false; dialogFileOperation = new DialogFileOperation(0); dialogInsertVari = new DialogInsertVari(0); dialogFontSize = new DialogFontSize(0); dialogLineSpace = new DialogLineSpace(0); editMode=0; #ifdef _2DCODE_ dlgQrcode = new dlgQrCode(); barcode= new QBarCode(); connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); connect(dlgQrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); #endif //textEdit->setFontFamily(Public::getFontFamily(12)); //textEdit->clear(); #ifdef MYSAVEFILEDLG dialogSaveFile =new DialogSaveFile(0); #endif sceneEditItem = false; } TextEditOption::~TextEditOption() { delete ui; if(fileDialog) delete fileDialog; if(dialogInsertVari) delete dialogInsertVari; if(dialogFontSize) delete dialogFontSize; if(dialogLineSpace) delete dialogLineSpace; #if _2DCODE_ if(dlgQrcode) delete dlgQrcode; #endif //free(dlgQrCode); #ifdef MYSAVEFILEDLG if(dialogSaveFile) delete dialogSaveFile; if(dialogFileOperation) delete dialogFileOperation; #endif } void TextEditOption::enableButtonSave(){ if(!ui->bottonSave->isEnabled()) ui->bottonSave->setEnabled(true); } void TextEditOption::bindText(QTextEdit *textEdit){ this->textEdit = textEdit; connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); ui->bottonSave->setEnabled(false); connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); #ifdef MYSAVEFILEDLG connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); #endif } void TextEditOption::bindSysPara(SysPara *sysPara){ this->sysPara = sysPara; #ifdef _2DCODE_ if(sysPara) { barcode->bindSysPara(sysPara); //qDebug()<<"TextEditOption bind by TextEdit."; } #endif //else qDebug()<<"TextEditOption bind by TextEdit failure"; } void TextEditOption::bindPicWidget(PicWidget *picwidget){ this->picwidget = picwidget;// stackedWidgetOption // connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); // ui->bottonSave->setEnabled(false); // connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); } void TextEditOption::bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText){ this->stackedWidgetOption = stackedWidgetOption;// stackedWidgetOption this->stackedWidgetText = stackedWidgetText; // connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); // ui->bottonSave->setEnabled(false); // connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); } void TextEditOption::showDlg(){ if(editMode==PICFILE){ disconnect(textEdit,SIGNAL(textChanged()),0,0); connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); ui->bottonSave->setEnabled(false); disconnect(dialogFileOperation,SIGNAL(openFile(QString,bool)),0,0); connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); on_pushButtonFile_pressed(); // dialogFileOperation->show(); } } /* * 和DialogFileOperation对接 * */ void TextEditOption::onFileOpen(QString filePath,bool insertFlag) { if(editMode==PICFILE){ if(filePath.endsWith(".png") )//||filePath.endsWith(".bmp") ) { if(insertFlag){ emit PicfileNameOpen(filePath,insertFlag); } else { // emit PicfileNameOpen(filePath,0); } return ; } else{ if(stackedWidgetOption) { stackedWidgetOption->setCurrentIndex(1); stackedWidgetText->setCurrentIndex(1); } } } else if(editMode==TXTFILE) { if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) { QString html = ""; QTextCharFormat fmt = textEdit->currentCharFormat (); if(insertFlag){ textEdit->insertHtml (html); } else { textEdit->setHtml (html); textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 } textEdit->mergeCurrentCharFormat(fmt); } else if(filePath.endsWith(".xml")) { memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); return; } else { QFile file(filePath); if(!file.open(QIODevice::ReadOnly)){ QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); } else { QByteArray data = file.readAll(); QTextCodec *codec = Qt::codecForHtml(data); QString str = codec->toUnicode(data); // if (Qt::mightBeRichText(str)) { // textEdit->setHtml(str); // } else { // str = QString::fromLocal8Bit(data); // textEdit->setPlainText(str); // } // QTextStream in (&file);in.readAll() if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 } if(insertFlag){ QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ textEdit->insertHtml(str); } } else { //updateFileVariWidth(str); textEdit->setHtml(str); fileName = filePath; if(sysPara){ sysPara->sysFile =fileName; sysPara->loadParaFromFile(); //qDebug()<<"textedit txt mode onFileOpen" << sysPara->sysFile; snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); } emit fileNameChanged(QFileInfo(fileName).fileName()); textEdit->moveCursor(QTextCursor::EndOfLine); onDialogLineSpaceAccepted(); } } //#if defined(__CONVERTERBOARD__)|| defined(__VX__) #if 1 fsync(file.handle()); #endif file.close(); } if(insertFlag) //在打开文件的时候不设置焦点 textEdit->setFocus(); if(stackedWidgetOption) { stackedWidgetOption->setCurrentIndex(0); stackedWidgetText->setCurrentIndex(0); // textEdit->setFocus(); } } else if(editMode==SCENE) { //开机会调用到此,然后打开文件 if(filePath.endsWith(".xml")) { memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); emit scenefileOpen(filePath,false);//sceneeditoption 接收这个信号然后打开文件 emit fileNameChanged(QFileInfo(filePath).fileName()); } else { if(sceneEditItem == true) { if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) { QString html = ""; QTextCharFormat fmt = textEdit->currentCharFormat (); if(insertFlag){ textEdit->insertHtml (html); } else { textEdit->setHtml(html); textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 } textEdit->mergeCurrentCharFormat(fmt); } else { QFile file(filePath); if(!file.open(QIODevice::ReadOnly)){ QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); } else { QByteArray data = file.readAll(); QTextCodec *codec = Qt::codecForHtml(data); QString str = codec->toUnicode(data); if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 } if(insertFlag){ QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ textEdit->insertHtml(str); } } else { textEdit->setHtml(str); fileName = filePath; if(sysPara){ sysPara->sysFile =fileName; sysPara->loadParaFromFile(); //qDebug()<<"onFileOpen"<sysFile; snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); } emit fileNameChanged(QFileInfo(fileName).fileName()); textEdit->moveCursor(QTextCursor::EndOfLine); } } //#if defined(__CONVERTERBOARD__)|| defined(__VX__) #if 1 fsync(file.handle()); #endif file.close(); } } /* if(stackedWidgetOption) { stackedWidgetOption->setCurrentIndex(0); stackedWidgetText->setCurrentIndex(0); } */ } } } void TextEditOption::onbottonInsertImgclicked() { if(fileDialog) delete fileDialog; fileDialog = new MyFileDialog(0); disconnect(fileDialog,SIGNAL(accepted()),0,0); connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertImgFIle_select())); fileDialog->showFileDialog(tr("插入图片"),QString("/"),QString("img (*.bmp *.jpg *.png *.gif)")); } void TextEditOption::onInsertImgFIle_select(){ QStringList files = fileDialog->selectedFiles(); for(int i = 0;i < files.size(); i++){ QString html = ""; textEdit->insertHtml (html); } } void TextEditOption::onbottonInsertTextclicked() { if(fileDialog) delete fileDialog; fileDialog = new MyFileDialog(0); disconnect(fileDialog,SIGNAL(accepted()),0,0); connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertTextFIle_select())); fileDialog->showFileDialog(tr("插入文本"),QString(DOC_ROOT_DIR),QString("text (*.html *.txt)")); } void TextEditOption::onInsertTextFIle_select(){ QStringList files = fileDialog->selectedFiles(); for(int i = 0;i < files.size(); i++){ QFile file(files.value(i)); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + files.value(i)); } else{ QTextStream in (&file); textEdit->insertHtml(in.readAll()); } //#if defined(__CONVERTERBOARD__)|| defined(__VX__) #if 1 fsync(file.handle()); #endif file.close(); } } void TextEditOption::onbuttonOpenclicked() { if(!textEdit){ QMessageBox::critical(this,tr("错误"),tr("TextEditOption 构造函数参数textEdit 不应当为空")); // } if(fileDialog) delete fileDialog; fileDialog = new MyFileDialog(0); disconnect(fileDialog,SIGNAL(accepted()),0,0); connect(fileDialog,SIGNAL(accepted()),this,SLOT(onOpenFIle_select())); fileDialog->DontUseNativeDialog; fileDialog->showFileDialog(tr("打开文件"),QString(DOC_ROOT_DIR),QString("Text files (*.txt *.html)")); } void TextEditOption::openFIle(QString openFileName){ QFile file(openFileName); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + openFileName); } else{ QTextStream in (&file); textEdit->setText(in.readAll()); fileName = openFileName; if(sysPara){ sysPara->sysFile =fileName; sysPara->loadParaFromFile(); //qDebug()<<"openFIle"<sysFile; snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); } emit fileNameChanged(QFileInfo(fileName).fileName()); } file.close(); } void TextEditOption::onOpenFIle_select(){ QStringList files = fileDialog->selectedFiles(); for(int i = 0;i < files.size(); i++){ openFIle(files.value(i)); } } void TextEditOption::on_buttonSaveAS_clicked() { #ifdef MYSAVEFILEDLG disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); dialogSaveFile->refreshListView(editMode); dialogSaveFile->show(); dialogSaveFile->setEnterFileName(""); #else if(fileDialog) delete fileDialog; fileDialog = new MyFileDialog(0); disconnect(fileDialog,SIGNAL(accepted()),0,0); connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); fileDialog->showFileDialog(tr("另存为"),QString(DOC_ROOT_DIR),QString("files (*.html *.txt)")); #endif } void TextEditOption::saveFile(){ if(fileName.endsWith(".txt")){ QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("以.txt保存将丢失所有格式,你是否愿意保存为.html格式?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ fileName += ".html"; } } QString html = textEdit->toHtml(); QString pattern = "setHtml(html.replace(UDISK_DOC_ROOT_DIR,DOC_ROOT_DIR)); } QTextDocumentWriter writer(fileName); //writer.setFormat("html"); bool success = writer.write(textEdit->document()); if (success){ textEdit->document()->setModified(false); ui->bottonSave->setEnabled(false); if(sysPara){ sysPara->sysFile =fileName; snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toAscii().constData()); } } else { QMessageBox::warning(this,tr("警告"),tr("无法保存文件") + fileName); } emit fileNameChanged(QFileInfo(fileName).fileName()); checkNewFileAppending(); } void TextEditOption::onSaveAS_FIle_select(){ QStringList files = fileDialog->selectedFiles(); for(int i = 0;i < files.size(); i++){ fileName = files[i]; if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) fileName += ".html"; saveFile(); } } void TextEditOption::onSaveASFile(QString filename,bool Flag){// use for dialogSaveFile class fileName = filename; if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) fileName += ".html"; saveFile(); //emit fileNameChanged(QFileInfo(fileName).fileName()); //qDebug()<clear(); fileName = ""; emit fileNameChanged(QFileInfo(fileName).fileName()); setFontFormat(); onDialogLineSpaceAccepted(); } newFileAppending = false; } void TextEditOption::onSave_File_reject(){ checkNewFileAppending(); } void TextEditOption::on_bottonSave_clicked() { if(sysPara->para.EditMode==SCENE){ //在场景模式下,这个是确定按钮,切换到场景模式 if(sceneEditItem) { editItemModeDone(); emit editItemDone(); } } else { if(fileName.isEmpty()){ #ifdef MYSAVEFILEDLG disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); dialogSaveFile->refreshListView(editMode); dialogSaveFile->show(); dialogSaveFile->setEnterFileName(""); #else if(fileDialog) delete fileDialog; fileDialog = new MyFileDialog(0); disconnect(fileDialog,SIGNAL(accepted()),0,0); connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); connect(fileDialog,SIGNAL(rejected()),this,SLOT(onSave_File_reject())); fileDialog->showFileDialog(tr("保存..."),QString(DOC_ROOT_DIR),QString("HTML files (*.html)")); #endif } else { saveFile(); newFileAppending = false; } } } bool TextEditOption::maybeSave(){ if (!textEdit->document()->isModified()) return true; if (fileName.startsWith(QLatin1String(":/"))) return true; QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("文档已经改变,是否保存?")); QPushButton *saveButton = msgBox.addButton(tr("保存"), QMessageBox::ActionRole); QPushButton *cancleSaveButton = msgBox.addButton(tr("放弃保存"), QMessageBox::ActionRole); QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); msgBox.exec(); if (msgBox.clickedButton() == saveButton) { newFileAppending = true; on_bottonSave_clicked(); return false; } else if (msgBox.clickedButton() == cancleSaveButton) { return true; } else return false; return true; } void TextEditOption::on_bottonNew_pressed() { if (maybeSave()) { //setFontFormat(); textEdit->clear(); fileName = ""; QFile file(fileName); emit fileNameChanged(QFileInfo(fileName).fileName()); } #ifdef VARCOLOR textEdit->insertHtml(QString("  ")); #endif } void TextEditOption::onOpenNewFile() { //if (maybeSave()) { //setFontFormat(); textEdit->clear(); fileName = ""; QFile file(fileName); emit fileNameChanged(QFileInfo(fileName).fileName()); } #ifdef VARCOLOR textEdit->insertHtml(QString("  ")); #endif } void TextEditOption::on_buttonInsertVari_pressed() { QString s,fontname=""; if(sysPara) { //s.sprintf("%s(%02dX%02d)",sysPara->para.qrOption.text,sysPara->para.qrOption.width,sysPara->para.qrOption.height); s= sysPara->para.qrOption.text; if(s.length()>120)s="string to long."; dialogInsertVari->setValue(""); } if(dialogInsertVari->exec() == QDialog::Accepted && sysPara){ // qDebug()<< "dialogInsertVari::Accepted"; int pixelSize = ui->labelFontSize->text().toInt(); QFont font; fontname=ui->labFontFamily->text(); //qDebug()<< "fontname:"<checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); //qDebug()<para.textEditCharSpace<para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ width = (fontMetrics.width("0123456789.m "))/13; } // if(sysPara->para.printNumPoint) // { // width = (fontMetrics.width("0123456789."))/11 ; // } // else // { // width = (fontMetrics.width("0123456789"))/10 ; // } int height = fontMetrics.ascent()+ fontMetrics.descent(); int digitalNum; int varType; // 调整变量占位区的大小 //qDebug()<<"leading:"<para.ExpirySplitMode; dialogInsertVari->getValue(&varType,&digitalNum,&splitMode); fmt = textEdit->currentCharFormat (); if((varType<9 || varType==13 || varType==14 || varType == 15) // 普通变量;varType=13 is CNT3 var // ||(varType>=20 && varType<29) // 横左变量 // ||(varType>=40 && varType<49) // 右横变量 ) { 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 // qDebug()<<"pixelSize:"<insertHtml(QString("") .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) .arg(height+1).arg(width*digitalNum).arg(varType1)); //插入索引后 // qDebug()<<"vari heigh:"<mergeCurrentCharFormat(fmt); } // 普通变量 VarType<=8 else if(varType >=9 && varType <=11) { // #ifdef _2DCODE_ s= sysPara->para.qrOption.text; dlgQrcode->move( (this->width() - dlgQrcode->width())/2 ,10); if(varType==9){ dlgQrcode->flagInsert=1; sysPara->para.qrOption.AutoCount=1; sysPara->para.qrOption.AutoRefresh=1; sysPara->para.qrOption.type=0; sysPara->para.qrOption.cntNum=digitalNum; //digitalNum dlgQrcode->setWindowTitle(tr("二维码变量设置")); dlgQrcode->SetOption(&sysPara->para.qrOption); dlgQrcode->setCntCheckBoxHide(0); dlgQrcode->show(); } else if(varType==10){ dlgQrcode->flagInsert=1; sysPara->para.qrOption.AutoCount=1; sysPara->para.qrOption.AutoRefresh=1; sysPara->para.qrOption.type=1; sysPara->para.qrOption.cntNum=digitalNum; dlgQrcode->setCntCheckBoxHide(0); dlgQrcode->setWindowTitle("二维码变量设置"); dlgQrcode->SetOption(&sysPara->para.qrOption); dlgQrcode->show(); } else if(varType==11){ barcode->move(0,0); barcode->flagInsert=1; sysPara->para.qrOption.AutoCount=1; sysPara->para.qrOption.AutoRefresh=1; sysPara->para.qrOption.type=1; sysPara->para.qrOption.cntNum=digitalNum; barVarFont = font; barVarHeight=height; barVarWidth =width; //barcode->setCntCheckBoxHide(0); barcode->setWindowTitle("条形码变量设置"); barcode->SetOption(&sysPara->para.bcOption); barcode->show(); } textEdit->mergeCurrentCharFormat(fmt); #endif } else if(varType ==RANDOMNUM){ //12 //digitalNum=13; //qDebug()<<"digitalNum"<insertHtml(QString("") .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) .arg(height+1).arg(width*digitalNum)); //插入索引后 textEdit->mergeCurrentCharFormat(fmt); } 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)); //qDebug()<<"DateTime "<insertHtml(QString("") .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(175):1) .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); textEdit->mergeCurrentCharFormat(fmt); }else { if(splitMode == 3 || splitMode ==7 ) { height = fontMetrics.ascent(); } // textEdit->insertHtml(QString("") // .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) // .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 //sysPara->print.ExpiryVar.bold = ui->checkBoxBold->isChecked(); textEdit->insertHtml(QString("") .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); textEdit->mergeCurrentCharFormat(fmt); } } else if(varType ==CURDATE ){ //81 :/80/image/expiryDate8.bmp qrc:/80/image/curDate8.bmp #if 0 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/81/image/curDate8.bmp"); #endif 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"); //dateFormat.insert(10,"x"); // dateFormat.insert(10,"A dd MM yy"); QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); int dateTimeWidth = fontMetrics.width(DateTime) ; qDebug()<<"insert splitMode="<insertHtml(QString("") // .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) // .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 // sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); textEdit->insertHtml(QString("") .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) .arg(height+1).arg(dateTimeWidth+2)); //插入索引后 sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); //qDebug()<<"sysPara->print.CurDateVar.bold:"<print.CurDateVar.bold; textEdit->mergeCurrentCharFormat(fmt); } #endif if(DateTime == "x") { qDebug()<<" x handle"; textEdit->insertHtml(QString("") .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):1) .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 textEdit->mergeCurrentCharFormat(fmt); }else { if(splitMode == 3 || splitMode ==7 ) { height = fontMetrics.ascent();//fontMetrics.ascent()+ fontMetrics.descent(); } // textEdit->insertHtml(QString("") // .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) // .arg(height+1).arg(width*(splitMode<2?9:7)+(width>>1))); //插入索引后 // sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); qDebug()<<"height:"<insertHtml(QString("") .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) .arg(height+1).arg(dateTimeWidth+4)); //插入索引后 //sysPara->print.CurDateVar.bold = ui->checkBoxBold->checkState(); //qDebug()<<"sysPara->print.CurDateVar.bold:"<print.CurDateVar.bold; textEdit->mergeCurrentCharFormat(fmt); } } else if(varType == CURCLASS) { //82 :/82/image/curDate1.bmp font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); QFontMetrics fontMetrics(font); int dateTimeWidth = fontMetrics.width("A") ; int pixBmpSize = 1; if (ui->checkBoxBold->checkState() && (pixelSize<=16)) { pixBmpSize = 875; } else { if(pixelSize >= 9) { pixBmpSize = 91; } else { pixBmpSize = 1; } } qDebug()<<"height:"<insertHtml(QString("") .arg(varType).arg(pixBmpSize) .arg(height+1).arg(dateTimeWidth+2)); //插入索引后 textEdit->mergeCurrentCharFormat(fmt); } textEdit->setFocus(); } } void TextEditOption::mergeFormatOnWordOrSelection(const QTextCharFormat &format) { QTextCursor cursor = textEdit->textCursor(); //if (!cursor.hasSelection()) // cursor.select(QTextCursor::WordUnderCursor); //cursor.mergeCharFormat(format); //textEdit->setTextCursor(cursor); //qDebug()<<"mergeFormatOnWordOrSelection"<mergeCurrentCharFormat(format); } void TextEditOption::updateSysParaToUI() //重载 { if(sysPara){ /*务必先设置行距*/ dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); onDialogLineSpaceAccepted(); /*将文件打开*/ QString file = QString(sysPara->para.lastOpenedFileName); if(QFile::exists(file)){ sysPara->sysFile =file; onFileOpen(file,false); } dialogFontSize->setValue(sysPara->para.fontPixelSize); } } void TextEditOption::onMbSetLineAndChar(int line_space, int char_space) { sysPara->para.textEditLineSpace = line_space; sysPara->para.textEditCharSpace = char_space; dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); onDialogLineSpaceAccepted(); } QLabel *TextEditOption::getLabelFontSize(){ return ui->labelFontSize; } QLabel *TextEditOption::getLabelFontFamily(){ return ui->labFontFamily; } void TextEditOption::setFontFormat(){ if(sysPara){ qreal pixelSize = ui->labelFontSize->text().toFloat(); if(pixelSize < Public::getMinFontPixelSize()) pixelSize = sysPara->para.fontPixelSize; if(pixelSize < Public::getMinFontPixelSize()){ pixelSize = Public::getMinFontPixelSize(); } if (pixelSize >= 0) { QTextCharFormat fmt; int DPI = 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 = // Public::getFontFamily((int)pixelSize); ui->labFontFamily->text(); ui->labFontFamily->setText(fontFamily); #endif fmt.setFontFamily(fontFamily); fmt.setFontWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16)? QFont::Bold:QFont::Normal); //fmt.setUnderlineStyle(); //fmt.setVerticalAlignment(QTextCharFormat::AlignBottom); //QfontMetrics.bottom //fmt.setUnderlineStyle(QTextCharFormat::NoUnderline); //qDebug() << "logicalDpiX:" << textEdit->logicalDpiX() << "logicalDpiY:" << textEdit->logicalDpiY(); //qDebug() << "physicalDpiX:" << textEdit->physicalDpiX() << "physicalDpiX:" << textEdit->physicalDpiX(); mergeFormatOnWordOrSelection(fmt); // QFont font = textEdit->document()->defaultFont(); // font.setPointSizeF(pointSize); // textEdit->document()->setDefaultFont(font); //qDebug()<<"Font:"<para.fontPixelSize = font.pointSize(); dialogFontSize->setValue(sysPara->para.fontPixelSize); ui->checkBoxBold->setChecked(font.bold()); } QPushButton * TextEditOption::getPushButtonPreview(){ return ui->pushButtonPreview; } QCheckBox *TextEditOption::getCheckBoxBold(){ return ui->checkBoxBold; } void TextEditOption::on_pushButtonFile_pressed() { if(sceneEditItem) { dialogFileOperation->refreshListView(TXTFILE); dialogFileOperation->exec(); } else { dialogFileOperation->refreshListView(editMode); dialogFileOperation->exec(); } } void TextEditOption::on_buttonSelectFont_pressed() { if(dialogFontSize->exec() == QDialog::Accepted){ int fontSize; dialogFontSize->getValue(&fontSize); ui->labFontFamily->setText(dialogFontSize->getFontFamily()); if(sysPara){ sysPara->para.fontPixelSize = fontSize; } ui->labelFontSize->setText(QString::number(fontSize)); setFontFormat(); textEdit->setFocus(); emit fontSizeChange(fontSize); bool flagBangal=false; if(dialogFontSize->getFontFamily() == "bangla") flagBangal = true; emit switchBengalLanguage(flagBangal); } } void TextEditOption::on_checkBoxBold_released() { setFontFormat(); textEdit->setFocus(); } void TextEditOption::onDialogLineSpaceAccepted(){ dialogLineSpace->getValue(&sysPara->para.textEditLineSpace,&sysPara->para.textEditCharSpace); // QString str = textEdit->toHtml(); // updateFileVariWidth(str); // textEdit->setHtml(str); for(QTextBlock textBlock = textEdit->document()->begin();textBlock != textEdit->document()->end(); textBlock = textBlock.next()){ QTextBlockFormat textBlockFormat = textBlock.blockFormat(); textBlockFormat.setAlignment(Qt::AlignBottom); textBlockFormat.setTopMargin(-1); textBlockFormat.setBottomMargin(sysPara->para.textEditLineSpace-1); QTextCursor textCursor = textEdit->textCursor(); textCursor.setPosition(textBlock.position()); textCursor.setBlockFormat(textBlockFormat); textEdit->setTextCursor(textCursor); } // QString str = textEdit->toHtml(); // updateFileVariWidth(str); // textEdit->setHtml(str); QFont font = textEdit->font(); font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); textEdit->setFont(font); } void TextEditOption::on_buttonLineSpace_clicked() { if(dialogLineSpace->exec() == QDialog::Accepted){ onDialogLineSpaceAccepted(); sysPara->saveParaToFile(); textEdit->setFocus(); sysPara->para.alterPrint.lineSpace = sysPara->para.textEditLineSpace; } } void TextEditOption::InsertQRCodeToEdit(QString barCodeName,int width,int height ,int enSave){ #ifdef _2DCODE_ textEdit->setText(""); InsertQRCodeToEdit(barCodeName, width, height); fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; if(enSave) saveFile(); #endif } void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ,int enSave){ #ifdef _2DCODE_ textEdit->setText(""); InsertBarCodeToEdit(barCodeName, width, height); fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; if(enSave) saveFile(); #endif } void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ) { #ifdef _2DCODE_ //dialogInsertVari->getValue(&varType,&digitalNum); QTextCharFormat fmt = textEdit->currentCharFormat (); textEdit->insertHtml(QString("") .arg(barCodeName) .arg(height).arg(width)); //插入索引后 textEdit->mergeCurrentCharFormat(fmt); //textEdit->setFocus(); //qDebug()<<"TEOption:"<getValue(&varType,&digitalNum); QTextCharFormat fmt = textEdit->currentCharFormat (); textEdit->insertHtml(QString("") .arg(barCodeName)//QFileInfo(barCodeName). .arg(width).arg(height)); //插入索引后 textEdit->mergeCurrentCharFormat(fmt); //textEdit->setFocus(); //qDebug()<<"TEOption:"<flagInsert ) { dlgQrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); dlgQrcode->flagInsert=0; if(sysPara->para.EditMode==PICFILE){ } else { if(sysPara->para.qrOption.type==0){ textEdit->insertHtml(QString("") .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 } else if(sysPara->para.qrOption.type==1){ textEdit->insertHtml(QString("") .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 } else if(sysPara->para.qrOption.type==2){ textEdit->insertHtml(QString("") .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 } } } sysPara->saveParaToFile(); #endif } void TextEditOption::onBarCodeClose(){ #ifdef _2DCODE_ bcPara_t bcoption; if(barcode->flagInsert ) { barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); //qDebug()<<"onBarCodeClose"<para.bcOption.barType<para.bcOption.height; barcode->GetOption2((bcPara_t*)&bcoption); //qDebug()<<"onBarCodeClose"<para.bcOption.barType = bcoption.type; barcode->flagInsert=0; if(sysPara->para.EditMode==PICFILE){ } else { fmt = textEdit->currentCharFormat (); textEdit->insertHtml(QString("") .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height)); //插入索引后 //qDebug()<") // .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height); int varType1= 7;//CNT1:7, CNT2:8 int digitalNum; if(sysPara->para.bcOption.var1En){ digitalNum=sysPara->para.bcOption.var1Num; textEdit->insertHtml(QString("%1%2").arg(sysPara->para.bcOption.TxtModule).arg(sysPara->para.bcOption.TxtLine)); textEdit->insertHtml(QString("") .arg(varType1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 } if(sysPara->para.bcOption.var2En) { digitalNum=sysPara->para.bcOption.var2Num; textEdit->insertHtml(QString("") .arg(varType1+1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 } textEdit->mergeCurrentCharFormat(fmt); } } sysPara->saveParaToFile(); #endif } void TextEditOption::onEditItemMode() { ui->bottonNew->setDisabled(true); ui->buttonSaveAS->setDisabled(true); ui->pushButtonPreview->setDisabled(true); ui->bottonSave->setText(tr("完成")); sceneEditItem = true; } void TextEditOption::editItemModeDone() { sceneEditItem = false; ui->bottonNew->setDisabled(false); ui->buttonSaveAS->setDisabled(false); ui->pushButtonPreview->setDisabled(false); ui->bottonSave->setText(tr("保存")); } void TextEditOption::modbus_insert_pic(QString filename) { // on_pushButtonFile_pressed(); dialogFileOperation->modbus_openfile(filename); } void TextEditOption::updateSysParaToZero() //重载 { if(sysPara){ dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); onDialogLineSpaceAccepted(); } } void TextEditOption::SetHiddenValue(bool select) { dialogInsertVari->EnableHiddenValue(select); } void TextEditOption::updateFileVariWidth(QString &str) { QString pattern = ""; QRegExp rx(pattern); int from = 0; // 正常变量 while(from < str.size() && from != -1) { from = str.indexOf(rx,from);//返回匹配到到起始地址 bool ok; if(from != -1){//找到匹配的 int width = rx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); int digitalNum = rx.cap(3).toInt(&ok);//第二个匹配,数字到个数 if(digitalNum>100){ //加粗 digitalNum/=100; ui->checkBoxBold->setChecked(true); } // 获取匹配的标签 QString matchedTag = rx.cap(0); // 构建新的标签,替换width属性值 QString newTag = matchedTag; int singlewidth = getSingleDigitWidth(); int newWidth= (singlewidth + sysPara->para.textEditCharSpace) * digitalNum; if(newWidth == width){ return; } newTag.replace(QString("width=\"%1\"").arg(rx.cap(4)), QString("width=\"%1\"").arg(newWidth)); // 替换原始文本中的标签 str.replace(from, rx.matchedLength(), newTag); from ++; from+=newTag.length(); } } } int TextEditOption::getSingleDigitWidth() { int pixelSize = ui->labelFontSize->text().toInt(); QFont font; QString fontname=ui->labFontFamily->text(); font.setFamily( fontname // 20160812 ); font.setPixelSize(pixelSize); font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); font.setLetterSpacing(QFont::AbsoluteSpacing,0); QFontMetrics fontMetrics(font); int width = (fontMetrics.width("0")); // int width = (fontMetrics.width("0123456789"))/10; // if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ // width = (fontMetrics.width("0123456789.m "))/13; // } return width; }