#ifndef BARCODEEDITOR_H #define BARCODEEDITOR_H #include #include "ViewModels.h" #include "SysPara.h" #include "dlgQrcodeFormat.h" #include "DlgBarcodeFormat.h" #include class DateFormatEditor; class DateReplaceEditor; class CounterEditor; enum BarcodeType { BARCODE_TYPE_BARCODE, BARCODE_TYPE_QRCODE, }; /** * @brief 条码设置界面所用的视图模型 * * @remark contentPattern 内可包含变量,如 {t} 表示日期/时间、{c} 表示计数器。 * 仅当 contentPattern 含有相应变量时,counterViewModel / dateViewModel 字段才有意义。 */ struct BarcodeViewModel { QString contentPattern; // 条形码内容模版,例如 "ABC{t}{c1}" CounterViewModel counterViewModel; // 计数器视图模型 DateItemModel dateViewModel; // 日期视图模型 BarcodeType type = BARCODE_TYPE_BARCODE; QVariant format; }; Q_DECLARE_METATYPE(BarcodeViewModel); namespace Ui { class BarcodeEditor; } class BarcodeEditor : public QDialog { Q_OBJECT public: explicit BarcodeEditor(QWidget *parent = nullptr); ~BarcodeEditor(); /** * @brief 绑定系统参数 * * 计数器配置选项卡所需的各个计数器的配置通过此方式提供; * @note * BarcodeEditor 将在 @see bindViewModel 中读取 sysPara->para.cnt1*** 或 sysPara->para.cnt2*** 相关参数,并在用户点击确认按钮时修改它们。 * * @remark 沿用的是旧逻辑 * * @param sysPara */ void bindSysPara(SysPara* sysPara) { m_sysPara = sysPara; } /** * @brief 注入条形码视图模型(纯结构体,按值拷贝) * * @param vm */ void bindViewModel(const BarcodeViewModel& vm); /** * @brief 获取当前视图模型 * * @note 调用前会先从各子编辑器收集最新值回写到内部 m_vm,再返回。 * * @return BarcodeViewModel */ BarcodeViewModel viewModel(); private slots: /** * @brief 条形码内容改变时触发 * * @param content */ void onContentChanged(QString content); /** * @brief 条形码、二维码格式更改按钮点击时触发 * */ void onBtnFormatClicked(); /** * @brief 日期按钮点击时触发 * */ void onBtnDatetimeClicked(); /** * @brief 计数器按钮点击时触发 * */ void onBtnCounterClicked(); /** * @brief 确定按钮点击时触发 * */ void onCheckBtnClicked(); /** * @brief 取消按钮点击时触发 * */ void onCloseBtnClicked(); /** * @brief 条形码格式确认时触发 * */ void onBarcodeFormatConfirmed(); /** * @brief 二维码格式确认时触发 * */ void onQrcodeFormatConfirmed(); protected: virtual bool eventFilter(QObject* obj, QEvent* event) override; private: Ui::BarcodeEditor *ui; BarcodeViewModel m_vm; DateFormatEditor *m_dateFormatEditor = nullptr; DateReplaceEditor *m_dateReplaceEditor = nullptr; CounterEditor *m_counterEditor = nullptr; SysPara* m_sysPara = nullptr; DlgBarcodeFormat m_barcodeFormatEditor; DlgQrcodeFormat m_qrcodeFormatEditor; }; #endif // BARCODEEDITOR_H