#ifndef TESTPRINTWIDGET_H #define TESTPRINTWIDGET_H #include #include #include #include #include #include "DialogSaveFile.h" #include "DialogFileOperation.h" #include // 包含UI自动生成的头文件 #include "ui_TestPrintWidget.h" #include "DialogFontSize.h" #include "scene/picscene.h" #include "ParaSettingUI.h" #include "ImageLoader.h" #include "ItemEditor.h" #include "scene/PicDateItem.h" #include "scene/PicImageItem.h" #include "scene/ScheduleShiftsEditor.h" #include "scene/PicCounterItem.h" #include #include "selectcodedlg.h" #include #include "CounterVarSet.h" #include "scene/BarcodeEditor.h" typedef struct ItemReplaceInfo { unsigned char vartypeR; //该图元中哪些类型(年、月、日...)需要替换 QString text; // 最初需要替换的内容 yyyy-MM-dd ... // QMap map; //类型对应替换的内容 如月index:2 对应要替换的QStringList: 01 02 A 04 05... QMap> map; }ItemReplaceInfo; // 计数器1、2的source值 #define SOURCE_COUNTER1 "Counter1_QvQ" #define SOURCE_COUNTER2 "Counter2_QvQ" class TestPrintWidget : public QWidget,public ParaSettingUI { Q_OBJECT public: TestPrintWidget(QWidget* parent = nullptr); ~TestPrintWidget(); void on_buttonSelectFont_pressed(); void mergeFormatOnWordOrSelection(const QTextCharFormat &format); void setFontFormat(int fontsize,QString fontfamily); QTextEdit* getQTextEdit(); PicScene* getPicScene(); void createItemImage(); void getShowSelectItemText(); void bindSysPara(SysPara *sysPara); void on_openfileButton_pressed(); void saveFile(); void on_KeyUp_clicked(); void on_KeyLeft_clicked(); void on_KeyRight_clicked(); void on_KeyDown_clicked(); void on_delButton_pressed(); void setFontNameIndex(float); void addDateTimeItem(const DateItemModel& model); void addScheduleShiftsItem(QVector schedules, TextItemModel txtModel); void addCounterItem(CounterViewModel vm, QSharedPointer font = nullptr); bool addItemFlag; // QString getReplateAfterStr(QString); // QMap varReplaceItemMap; QMap varReplaceItemMap; public slots: void on_enlargeButton_pressed(); void on_addButton_pressed(const SourceType type = SourceType::UNKNOWN); void onEditItemDone(); void onEditItemCounterDone(); void onReplaceVarEditDone(); void on_saveButton_pressed(); void onSaveASFile(QString filename,bool Flag); void onFileOpen(QString filePath,bool insertFlag); void onCreateSceneImage(QString filePath);//生成场景图片 void on_newfileButton_pressed(); void slt_BarCodeItemDone(); void slt_QRCodeItemDone(QString str); protected: // 重写事件过滤器 bool eventFilter(QObject *watched, QEvent *event) override; private slots: void onSceneFocusedItemPosChanged(QPoint p); void onBtn3DClicked(); void onImageLoaderAccepted(); void onBtnItemConfigClicked(); void onItemEditorAccepted(); void on_cbResolution_currentIndexChanged(int index); void addDateItem(); void showBarcodeEditor(bool restoreVM = true); void onBtnArrowClicked(); // 复制 void on_btn_copy_clicked(); // 粘贴 void on_btn_paste_clicked(); private: // UI对象 Ui::TestPrintWidget ui; // 控件成员变量(关联UI控件) QButtonGroup* m_ButtonGroup; QTextEdit* m_TextEdit; QLineEdit* m_LineEdit; void parseVbfile(QXmlStreamReader &reader); /** * @brief 对 on_KeyUp_clicked 等按键事件的简便包装 * * @param key */ void moveSelectedItem(Qt::Key key); // 加载图标(保留原功能) QPixmap loadIcon(const QString& iconName, const QSize& size = QSize(40, 40)); DialogFontSize *dialogFontSize; PicScene *pPicScene; //保存Item的Html // PicScene *pPicScene2; // 保存Item的Html对应的图片 解决场景模式文本无法放大的问题 QGraphicsView *view; QGraphicsView *pViewer; PicTextItem *textItem; PicTextItem *textItem2; PicCodeItem *codeItem_Operation = nullptr; // 修改条形码和二维码的标志 bool editCodeFlag = false; QString xmlfileName; DialogSaveFile *dialogSaveFile; DialogFileOperation *dialogFileOperation; ImageLoader *imageLoader = nullptr; ItemEditor * itemEditor = nullptr; BarcodeEditor m_barcodeEditor; int editMode; bool m_CreateImageFlag; QGraphicsScene *m_pSavePicScene; SelectCodeDlg* m_SelectCodeDlg = nullptr; void onSceneAccepted(PicTextItem *pTextItem); // 条形码和二维码的选择界面 void initSelecteCodeDlg(); // 在界面添加显示条形码和二维码的场景 void addCodeItem(QString str); //寻找当前选中的图层,没有选中的就不继续处理 int checkSelectScene(); // 复制 int pasteTime = 1; SourceType m_copiedSourceType = SourceType::UNKNOWN; QVariant m_copiedSourceValue; QXmlStreamAttributes m_copiedAttrs; QString m_copiedHtml; bool m_copiedSpecialConditions = false; int m_copiedCatchCnt1StartValue = -1; int m_copiedCatchCnt1CurrValue = -1; int m_copiedCounterType = COUNTER_TYPE_1; int m_copiedCounterDigitalNum = 1; int m_copiedCounterLetterSpace = 1; QString m_copiedCounterFontFamily = "Dinkie9"; QPointF m_copiedPos; //判断要复制什么图层,添加该图层 PicTextItem* checkSelectItem(PicTextItem* srcItem); //保存复制内容 bool cacheSelectedLayerForPaste(PicTextItem* srcItem); //粘贴 void pasteCopiedLayer(); 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_showScheduleShiftsEditor(QVector schedules, TextItemModel txtModel); }; #endif // TESTPRINTWIDGET_H