148 lines
3.4 KiB
C++
148 lines
3.4 KiB
C++
#ifndef BARCODEEDITOR_H
|
|
#define BARCODEEDITOR_H
|
|
|
|
#include <QDialog>
|
|
|
|
#include "ViewModels.h"
|
|
#include "SysPara.h"
|
|
#include "dlgQrcodeFormat.h"
|
|
#include "DlgBarcodeFormat.h"
|
|
#include <QVariant>
|
|
|
|
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
|