#include "SceneEditOption.h" #include "pictextitem.h" #include "ui_sceneEditOption.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "myview.h" #include "LogInfo.h" #include #include #include MoveInput* moveInput; SceneEditOption::SceneEditOption(QWidget *parent) : QWidget(parent), ui(new Ui::SceneEditOption),newScene(0) { ui->setupUi(this); editMode = SCENE; xmlfileName = ""; dialogFileOperation = new DialogFileOperation(0); #ifdef MYSAVEFILEDLG dialogSaveFile =new DialogSaveFile(0); //connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); #endif m_CreateImageFlag = false; m_pSavePicScene = new QGraphicsScene(); m_pSavePicScene->setSceneRect(QRectF(0, 0, 3200, MAX_PRINT_ROW_NUM)); //生成图片的场景 moveInput = new MoveInput(parent); } SceneEditOption::~SceneEditOption() { if(m_pSavePicScene) { delete m_pSavePicScene; } if(moveInput) { delete moveInput; } } void SceneEditOption::bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText){ this->stackedWidgetOption = stackedWidgetOption;// stackedWidgetOption this->stackedWidgetText = stackedWidgetText; connect(this->stackedWidgetOption,SIGNAL(currentChanged(int)),this,SLOT(onStackedWidgetOptionCurrentChanged(int))); } void SceneEditOption::bindSysPara(SysPara *sysPara){ this->sysPara = sysPara; } void SceneEditOption::enableButtonSave(){ if(!ui->saveButton->isEnabled()) ui->saveButton->setEnabled(true); } void SceneEditOption::onStackedWidgetOptionCurrentChanged(int index) { const QString objectName=this->stackedWidgetOption->currentWidget()->objectName(); // const QString objectName=this->stackedWidgetOption->widget(index)->objectName(); qDebug()<<"index="<para.EditMode) { // qDebug()<<"显示新场景--open"; this->pPicScene->setIsdrawBackground(true); this->stackedWidgetOption->hide(); // //show_scene_new_dlg(); // foreach (QLayout *lay, listQLayout) { // newScene->showQLayout(lay,false); // } newScene->Layout_ToNew(); newScene->show(); } else { // qDebug()<<"隐藏新场景--hide"; this->pPicScene->setIsdrawBackground(false); this->stackedWidgetOption->setVisible(true); newScene->hide(); newScene->Layout_ToDefault(); // foreach (QLayout *lay, listQLayout) { // newScene->showQLayout(lay,true); // } } } } void SceneEditOption::bindScene(PicScene *pPicScene, QGraphicsView *pGraphicViewer,QTextEdit *pTextEdit){ this->pPicScene = pPicScene; this->pViewer = pGraphicViewer; this->textEdit = pTextEdit; //connect(pPicScene,SIGNAL(xmlContentChanged ()),this,SLOT(enableButtonSave())); connect(pPicScene,SIGNAL(selectionChanged()),this,SLOT(enableButtonSave())); ui->saveButton->setEnabled(false); connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); connect(dialogFileOperation,SIGNAL(createSceneImage(QString)),this,SLOT(onCreateSceneImage(QString))); #ifdef MYSAVEFILEDLG connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); #endif //edit@12-06 显示网格线 this->pPicScene->setIsdrawBackground(true); } void SceneEditOption::show_scene_new_dlg() { QWidget *tabMainWindow=this->parentWidget()->parentWidget(); if(!newScene) { this->stackedWidgetOption->hide(); newScene=new FormScenedlg(tabMainWindow); newScene->setObjectName("newScene"); newScene->setAutoFillBackground(true); newScene->setPalette(tabMainWindow->palette()); newScene->bindScene(this->pPicScene,this->pViewer,this->textEdit); //edit@12-07另一种信号通信 connect(newScene,SIGNAL(delButton()),this,SLOT(on_delButton_pressed())); connect(newScene,SIGNAL(saveButton()),this,SLOT(on_saveButton_pressed())); connect(newScene,SIGNAL(openfileButton()),this,SLOT(on_openfileButton_pressed())); connect(newScene,SIGNAL(previewButton()),this,SLOT(on_previewButton_pressed())); //connect(newScene,SIGNAL(previewButton()),this,SIGNAL(previewScene())); connect(newScene,SIGNAL(addButton()),this,SLOT(on_addButton_pressed())); connect(newScene,SIGNAL(EditItemButton()),this,SLOT(on_EditItemButton_pressed())); connect(newScene,SIGNAL(saveAsButton()),this,SLOT(on_saveAsButton_pressed())); connect(newScene,SIGNAL(newfileButton()),this,SLOT(on_newfileButton_pressed())); connect(newScene,SIGNAL(enlargeButton()),this,SLOT(on_enlargeButton_pressed())); connect(newScene,SIGNAL(reduceButton()),this,SLOT(on_reduceButton_pressed())); connect(newScene,SIGNAL(ZoomOrigin()),this,SLOT(on_test_pressed())); connect(newScene,SIGNAL(btn_test2()),this,SLOT(on_btn_test2())); connect(this->pPicScene,SIGNAL(showTextWidthHeight()),newScene,SLOT(reset_showTextWidthHeight())); //connect(this->pPicScene,SIGNAL(adjustItemsPos()),newScene,SLOT(adjustItemsPosFalse())); newScene->move(0,270); newScene->Layout_ToNew(); } } void SceneEditOption::on_previewButton_pressed() { this->pPicScene->setIsdrawBackground(false); emit previewScene(); } void SceneEditOption::on_addButton_pressed() { pPicScene->clearSelection(); #if 0 emit addPicTextItem(); #else textItem = new PicTextItem(); //textItem->setFont(myFont); //textItem->setTextInteractionFlags(Qt::TextEditorInteraction); pPicScene->addItem(textItem); //textItem->setDefaultTextColor(myTextColor); //QFont font = textItem->font(); //font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); //textItem->setFont(font); QList items = pPicScene->items(); if(pPicScene->items().count()>1){ QRectF itemRect= items.at(1)->boundingRect(); textItem->setPos( items.at(1)->scenePos().x()+itemRect.width()+20, items.at(1)->scenePos().y()); } //else textItem->setPos(0,0); else textItem->setPos(this->pViewer->mapToScene(0,0));//edit@12-07 textItem->setPlainText("Vernon Bach Printer"); ui->saveButton->setEnabled(true); //qDebug()<<"sysPara->para.textEditCharSpace:"<para.textEditCharSpace; //edit@12-12 新的打开方式直接进入编辑模式 textItem->setPlainText(""); textItem->setSelected(true); on_EditItemButton_pressed(); #endif } bool SceneEditOption::maybeSave(){ if (xmlfileName.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) { on_saveButton_pressed(); return false; } else if (msgBox.clickedButton() == cancleSaveButton) { return true; } else return false; return true; } void SceneEditOption::on_newfileButton_pressed() { if (maybeSave()) { pPicScene->clear(); pViewer->viewport()->update(); unsigned char SpecialVarEnable = 0; sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); xmlfileName = ""; QFile file(xmlfileName); emit fileNameChanged(QFileInfo(xmlfileName).fileName()); } #ifdef VARCOLOR textEdit->insertHtml(QString("  ")); #endif } void SceneEditOption::on_delButton_pressed() { #if 0 #else foreach (QGraphicsItem *item, pPicScene->selectedItems()) { pPicScene->removeItem(item); delete item; ui->saveButton->setEnabled(true); } #endif } void SceneEditOption::on_saveAsButton_pressed() { pPicScene->clearSelection(); #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(""); #endif } void SceneEditOption::on_saveButton_pressed() { pPicScene->clearSelection(); #if 0 #else 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))); dialogSaveFile->refreshListView(editMode); dialogSaveFile->show(); dialogSaveFile->setEnterFileName(""); #endif } else { pPicScene->update(); saveFile(); if(sysPara){ sysPara->sysFile =xmlfileName; snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toAscii().constData()); } //snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toAscii().constData()); ui->saveButton->setEnabled(false); emit fileNameChanged(QFileInfo(xmlfileName).fileName()); } #endif } void SceneEditOption::on_openfileButton_pressed() { pPicScene->clearSelection(); #if 0 } #else dialogFileOperation->refreshListView(editMode); dialogFileOperation->exec(); #endif } void SceneEditOption::on_EditItemButton_pressed() { #if 0 #else foreach (QGraphicsItem *item, pPicScene->selectedItems()) { if(item) { PicTextItem *pTextItem = (PicTextItem *)item; //qDebug()<<"edit Item"; //ui->textEdit->setText(pTextItem->toHtml()); textEdit->setHtml(pTextItem->toHtml()); //切换到textedit的界面 emit editItemMode(); //stackedWidgetText->setCurrentWidget(ui->pageTextEdit); //stackedWidgetOption->setCurrentWidget(ui->textEditOption); stackedWidgetText->setCurrentIndex(0); stackedWidgetOption->setCurrentIndex(0); ui->saveButton->setEnabled(true); //edit@12-12 pPicScene->clearSelection(); item->setSelected(true); break; } } #endif } void SceneEditOption::onEditItemDone() { #if 1 //stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); //stackedWidgetOption->setCurrentWidget(ui->senceEditOption); stackedWidgetText->setCurrentIndex(3); stackedWidgetOption->setCurrentIndex(1); foreach (QGraphicsItem *item, pPicScene->selectedItems()) { if(item) { PicTextItem *pTextItem = (PicTextItem *)item; //qDebug()<<"edit Item done"; QFont font = pTextItem->font(); font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); pTextItem->setFont(font); pTextItem->setHtml(textEdit->toHtml()); onSceneAccepted(pTextItem); } } #endif } void SceneEditOption::onCreateSceneImage(QString filePath) { m_CreateImageFlag = true; m_pSavePicScene->clear(); onFileOpen(filePath,false); #if 1 m_pSavePicScene->clearSelection(); QSize size(m_pSavePicScene->itemsBoundingRect().width(),m_pSavePicScene->itemsBoundingRect().height()); QImage image(size,QImage::Format_ARGB32); image.fill(0x00ffffff);//填充白色 //image.save("./printScene.jpg");//图片 QPainter painter(&image); m_pSavePicScene->render(&painter,QRectF(),m_pSavePicScene->itemsBoundingRect()); //qDebug()<<"scene rect:"<itemsBoundingRect(); image.save("./printSceneView.png");//图片 #endif m_CreateImageFlag = false; } extern QStringList stringListRecive; void SceneEditOption::parseVbfile(QXmlStreamReader &reader) { // int textItemPosX; // int textItemPosY; // textItemPosX = picText->pos().x() - pPicScene->itemsBoundingRect().x(); // textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); float pos_x,pos_y; bool Condition= false ; int CatchStartValue = -1; int CatchValue = -1; while (!reader.atEnd()) { reader.readNext(); if (reader.isStartElement()) { // 开始元素 QString strElementName = reader.name().toString(); if (QString::compare(strElementName, "VBfile") == 0) { //qDebug() << QString::fromLocal8Bit("********** 开始元素 ********** "); } else if (QString::compare(strElementName, QString("pointer_x")) == 0) { // 方式一 reader.readNext(); if (reader.isCharacters()) { pos_x = reader.text().toString().toDouble(); //qDebug() << QString("pointer_x:%1").arg(reader.text().toString()); } } else if (QString::compare(strElementName, QString("pointer_y")) == 0) { // 方式二 pos_y = reader.readElementText().toDouble(); //qDebug() << QString("pointer_y:%1").arg(reader.readElementText()); } else if (QString::compare(strElementName, QString("Condition")) == 0) { Condition = reader.readElementText().toInt() ? true : false; } else if (QString::compare(strElementName, QString("CatchStartValue")) == 0) { CatchStartValue = reader.readElementText().toInt(); } else if (QString::compare(strElementName, QString("CatchValue")) == 0) { CatchValue = reader.readElementText().toInt(); } else if (QString::compare(strElementName, QString("html_src")) == 0) { //qDebug() << QString("html_src:%1").arg(reader.readElementText()); } } else if (reader.isEntityReference()) { // 实体引用 QString strName = reader.name().toString(); QString strText = reader.text().toString(); //qDebug() << QString("EntityReference : %1(%2)").arg(strName).arg(strText); } else if (reader.isCDATA()) { // CDATA QString strCDATA = reader.text().toString(); //qDebug() << QString("CDATA : %1").arg(strCDATA); PicTextItem *pPictText = new PicTextItem(); if(m_CreateImageFlag) { m_pSavePicScene->addItem(pPictText); } else { pPicScene->addItem(pPictText); } QFont font = pPictText->font(); font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); pPictText->setFont(font); pPictText->setPos(pos_x,pos_y); pPictText->SpecialConditions = Condition; pPictText->CatchCnt1StartValue = CatchStartValue; pPictText->CatchCnt1CurrValue = CatchValue; // Condition= false ; // CatchValue = -1; //LogInfo::setRunStatusText(tr("接收文件解析::2")); if(!sysPara->status.forTemplateUse || m_CreateImageFlag) { pPictText->setHtml(strCDATA); } else { //qDebug() << tr("接收文件解析:"); //LogInfo::setRunStatusText(tr("接收文件解析::3")); //stringListRecive << "aaaa" << "bbbb" << "cccc"; if(strCDATA.contains("#1111") || strCDATA.contains("")) { if(stringListRecive.size() > 0) { if(strCDATA.contains("#1111")) { strCDATA.replace("#1111",stringListRecive.at(0).toStdString().c_str()); } else if(strCDATA.contains("")) { emit generateQRCode(stringListRecive.at(0)); strCDATA.replace("modbusQR#01.bmp","modbusQR.bmp"); } } } else if(strCDATA.contains("#2222") || strCDATA.contains("")) { if(stringListRecive.size() > 1) { if(strCDATA.contains("#2222")) { strCDATA.replace("#2222",stringListRecive.at(1).toStdString().c_str()); } else if(strCDATA.contains("")) { emit generateQRCode(stringListRecive.at(1)); strCDATA.replace("modbusQR#02.bmp","modbusQR.bmp"); } } } else if(strCDATA.contains("#3333") || strCDATA.contains("")) { if(stringListRecive.size() > 2) { if(strCDATA.contains("#3333")) { strCDATA.replace("#3333",stringListRecive.at(2).toStdString().c_str()); } else if(strCDATA.contains("")) { emit generateQRCode(stringListRecive.at(2)); strCDATA.replace("modbusQR#03.bmp","modbusQR.bmp"); } } } 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; reader.readNext(); if (reader.isCharacters()) { QString strCharacters = reader.text().toString(); //qDebug() << QString("Characters : %1").arg(strCharacters); } } else if (reader.isEndElement()) { // 结束元素 QString strElementName = reader.name().toString(); if (QString::compare(strElementName, "Blogs") == 0) { //qDebug() << QString::fromLocal8Bit("********** 结束元素 ********** "); break; // 跳出循环(解析 QXmlStreamReader::EndDocument) } else if (QString::compare(strElementName, "Blog") == 0) { //qDebug() << QString::fromLocal8Bit("********** 结束元素 ********** "); } } } } /* * 和DialogFileOperation对接 * */ void SceneEditOption::onFileOpen(QString filePath,bool insertFlag){ if(editMode==SCENE) { if(filePath.endsWith(".xml")) { QFile file(filePath); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 以只写模式打开文件 xmlfileName=filePath; QXmlStreamReader reader(&file); if(!m_CreateImageFlag) { pPicScene->clear(); pViewer->viewport()->update(); unsigned char SpecialVarEnable = 0; sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); } // 解析 XML,直到结束 while (!reader.atEnd()) { // 读取下一个元素 QXmlStreamReader::TokenType nType = reader.readNext(); switch (nType) { case QXmlStreamReader::StartDocument: { // 开始文档 //qDebug() << QString::fromLocal8Bit("********** 开始文档(XML 声明) ********** "); // XML 声明 QString strVersion = reader.documentVersion().toString(); QString strEncoding = reader.documentEncoding().toString(); bool bAlone = reader.isStandaloneDocument(); //qDebug() << QString::fromLocal8Bit("版本:%1 编码:%2 Standalone:%3") // .arg(strVersion).arg(strEncoding).arg(bAlone) << "\r\n"; break; } case QXmlStreamReader::Comment: { // 注释 //qDebug() << QString::fromLocal8Bit("********** 注释 ********** "); QString strComment = reader.text().toString(); //qDebug() << strComment << "\r\n"; break; } case QXmlStreamReader::ProcessingInstruction: { // 处理指令 //qDebug() << QString::fromLocal8Bit("********** 处理指令 ********** "); QString strProcInstr = reader.processingInstructionData().toString(); //qDebug() << strProcInstr << "\r\n"; break; } case QXmlStreamReader::DTD: { // DTD //qDebug() << QString::fromLocal8Bit("********** DTD ********** "); QString strDTD = reader.text().toString(); QXmlStreamNotationDeclarations notationDeclarations = reader.notationDeclarations(); // 符号声明 QXmlStreamEntityDeclarations entityDeclarations = reader.entityDeclarations(); // 实体声明 // DTD 声明 QString strDTDName = reader.dtdName().toString(); QString strDTDPublicId = reader.dtdPublicId().toString(); // DTD 公开标识符 QString strDTDSystemId = reader.dtdSystemId().toString(); // DTD 系统标识符 //qDebug() << QString::fromLocal8Bit("DTD : %1").arg(strDTD); //qDebug() << QString::fromLocal8Bit("DTD 名称 : %1").arg(strDTDName); //qDebug() << QString::fromLocal8Bit("DTD 公开标识符 : %1").arg(strDTDPublicId); //qDebug() << QString::fromLocal8Bit("DTD 系统标识符 : %1").arg(strDTDSystemId); //qDebug() << "\r\n"; break; } case QXmlStreamReader::StartElement: { // 开始元素 QString strElementName = reader.name().toString(); if (QString::compare(strElementName, "VBfiles") == 0) { // 根元素 //qDebug() << QString::fromLocal8Bit("********** 开始元素 ********** "); QXmlStreamAttributes attributes = reader.attributes(); if (attributes.hasAttribute("Version")) { QString strVersion = attributes.value("Version").toString(); //qDebug() << QString::fromLocal8Bit("属性:Version(%1)").arg(strVersion); } parseVbfile(reader); } break; } case QXmlStreamReader::EndDocument: { // 结束文档 //qDebug() << QString::fromLocal8Bit("********** 结束文档 ********** "); break; } } } if (reader.hasError()) { // 解析出错 //qDebug() << QString::fromLocal8Bit("错误信息:%1 行号:%2 列号:%3 字符位移:%4").arg(reader.errorString()).arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.characterOffset()); } //qDebug()<<"open done"; file.close(); // 关闭文件 //snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toAscii().constData()); if(!m_CreateImageFlag)//生成图片显示 { if(sysPara) { sysPara->sysFile =filePath; sysPara->loadParaFromFile(); //qDebug()<<"textedit txt mode onFileOpen" << sysPara->sysFile; snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toAscii().constData()); } emit fileNameChanged(QFileInfo(xmlfileName).fileName()); ui->saveButton->setEnabled(false); QList items = pPicScene->items(); foreach (QGraphicsItem *item, items) { PicTextItem *picText = qgraphicsitem_cast(item); onSceneAccepted(picText); } } } } } } void SceneEditOption::saveFile(){ #if 1 //qDebug()<<"SceneEditOption save scene start"; //QList itemList = pPicScene->items(); //qDebug()<<"xmlfileName:"<< xmlfileName; QFile file(xmlfileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { // 只写模式打开文件 qDebug() << QString("Cannot write file %1(%2).").arg(xmlfileName).arg(file.errorString()); return; } //qDebug()<<"open xmlfileName successfull"; QXmlStreamWriter writer(&file); // writer.setCodec("GBK"); // XML 编码 writer.setAutoFormatting(true); // 自动格式化 writer.writeStartDocument("1.0", true); // 开始文档(XML 声明) writer.writeComment(QString::fromLocal8Bit("Vernon Bach graphic scene file")); // 注释 //writer.writeProcessingInstruction("xml-stylesheet type=\"text/css\" href=\"style.css\""); // 处理指令 // DTD writer.writeDTD(QString::fromLocal8Bit(" ]>")); //writer.writeDTD(QString::fromLocal8Bit(" ]>")); writer.writeStartElement("VBfiles"); // 开始根元素 writer.writeAttribute("Version", "1.0"); // 属性 QList items = pPicScene->items(); foreach (QGraphicsItem *item, items) { PicTextItem *picText = qgraphicsitem_cast(item); //qDebug()<<"item position: "<< picText->pos(); writer.writeStartElement("VBfile"); // 开始子元素 writer.writeTextElement(QString::fromLocal8Bit("pointer_x"), QString::fromLocal8Bit("%1").arg(picText->pos().x())); writer.writeTextElement(QString::fromLocal8Bit("pointer_y"), QString::fromLocal8Bit("%1").arg(picText->pos().y())); writer.writeTextElement(QString::fromLocal8Bit("Condition"), QString::fromLocal8Bit("%1").arg(picText->SpecialConditions? 1:0)); writer.writeTextElement(QString::fromLocal8Bit("CatchStartValue"), QString::fromLocal8Bit("%1").arg(picText->CatchCnt1StartValue)); writer.writeTextElement(QString::fromLocal8Bit("CatchValue"), QString::fromLocal8Bit("%1").arg(picText->CatchCnt1CurrValue)); //writer.writeEntityReference("Copyright"); //writer.writeCDATA(QString::fromLocal8Bit("html code")); writer.writeTextElement(QString::fromLocal8Bit("html_src"), QString::fromLocal8Bit("my_src")); writer.writeCDATA((picText->toHtml())); //qDebug()<<"tohtml"<toHtml(); //writer.writeCharacters(">"); //writer.writeEmptyElement(QString::fromLocal8Bit("Empty")); // 空元素 writer.writeEndElement(); // 结束子元素 } writer.writeEndElement(); // 结束根元素 writer.writeEndDocument(); // 结束文档 //qDebug()<<"sceneEditOption save done"; //#if defined(__CONVERTERBOARD__)|| defined(__VX__) #if 1 fsync(file.handle()); #endif file.close(); // 关闭文件 #endif } void SceneEditOption::onSaveASFile(QString filename,bool Flag){// use for dialogSaveFile class qDebug()<sysFile =xmlfileName; snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toAscii().constData()); } //snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",xmlfileName.toAscii().constData()); ui->saveButton->setEnabled(false); emit fileNameChanged(QFileInfo(xmlfileName).fileName()); } void SceneEditOption::on_enlargeButton_pressed() { ((MyView*)pViewer)->ZoomOut(); } void SceneEditOption::on_reduceButton_pressed() { ((MyView*)pViewer)->ZoomIn(); } void SceneEditOption::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); QFont font = pTextItem->font(); font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); pTextItem->setFont(font); sysPara->saveParaToFile(); } //edit@12-10 void SceneEditOption::on_test_pressed() { const QPoint originScene=pViewer->mapFromScene(0,0); const QRectF sceneRect=pPicScene->sceneRect(); const QRectF BoundingRect=pPicScene->itemsBoundingRect(); qDebug()<