|
|
#pragma once
|
|
|
|
|
|
#include <QMap>
|
|
|
#include <QDialog>
|
|
|
#include <QFileDialog>
|
|
|
|
|
|
#include "IxSerDes.h"
|
|
|
#include "iPlugin_global.h"
|
|
|
|
|
|
/// @brief 基础窗体类,实现 如下功能
|
|
|
/// (1) 序列化接口
|
|
|
/// (2) 存储Map
|
|
|
/// (3) 背景图片及样式设置
|
|
|
/// @note 关于序列化对话框或Widget的说明
|
|
|
/// (a)派生自ZxUiBase类
|
|
|
/// (b)通过bindSubCtrl绑定子控件 ==或者==
|
|
|
/// (c)通过重载onSerialize/onDeserialize两函数
|
|
|
|
|
|
class ZxSerializer;
|
|
|
class I_PLUGIN_EXPORT ZxUiBase : public QDialog,
|
|
|
virtual public IxSerDes
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
|
|
|
|
explicit ZxUiBase(QWidget *parent = 0);
|
|
|
~ZxUiBase();
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 初始化
|
|
|
virtual void initUI();
|
|
|
virtual void initSheets(); //Sheet
|
|
|
|
|
|
// 根据分辨率对窗体大小进行适当调整,只有在InitUI之后调用才会有效
|
|
|
virtual void resizeUI();
|
|
|
|
|
|
/// @brief 绑定子控件
|
|
|
/// @param p:子控件
|
|
|
/// @note Key,系统自动管理,确保不重复
|
|
|
virtual void bindSubCtrl(QWidget* p);
|
|
|
|
|
|
/// @brief 绑定子控件
|
|
|
/// @param p:子控件
|
|
|
/// @param sKey:Key,为确保Key不重复,Key可能被改变
|
|
|
/// @note
|
|
|
virtual void bindSubCtrl(QWidget* p, QString& sKey);
|
|
|
|
|
|
/// @brief 获取指定子控件
|
|
|
/// @param sKey:Key,请调用者自己确定本Key不重复
|
|
|
/// @note 该函数慎用
|
|
|
virtual QWidget* getSubCtrl(QString sKey);
|
|
|
|
|
|
// 返回
|
|
|
virtual QMap<QString, QWidget *> *getMapCtrls();
|
|
|
virtual QMap<QString, QVariant> *getMapOthers();
|
|
|
|
|
|
// 序列化
|
|
|
virtual void onSerialize(ZxSerializer* ser);
|
|
|
virtual void onDeserialize(ZxSerializer* ser);
|
|
|
|
|
|
virtual void copyFrom(ZxUiBase* p);
|
|
|
virtual void copyOneSubCtrol(QWidget*& pFrom, QWidget*& pTo);
|
|
|
|
|
|
// 把Layout载体转换为ScrollArea
|
|
|
virtual QLayout* buildAsScrollLayout(QLayout* pLayout, QString sTag = QString());
|
|
|
|
|
|
// 清空Layout内容
|
|
|
static bool clearLayoutOfWx(QWidget* pWx, ZxUiBase* pWxParent);
|
|
|
static bool clearChildrenOfLayout(QLayout* pLayout, ZxUiBase* pWxParent);
|
|
|
static bool setLayoutVisible(QLayout* pLayout, bool bVisible);
|
|
|
|
|
|
// 当清空Layout布局时,把m_mapCtrls中涉及到的Wx清除
|
|
|
virtual bool removeSubCtrlCached(QWidget* pWx);
|
|
|
|
|
|
// 允许在外界进行设定
|
|
|
bool isEnableSP();
|
|
|
void enableSP(bool b);
|
|
|
|
|
|
// 对于在对话框中设定字体的(好像对话框如果调整字体大小粗细等会自动改变字体)
|
|
|
// 通过此函数,重新改为系统字体
|
|
|
// 如果bFamilyOnly为true,则 只修改字体名,如宋体等
|
|
|
// false,则全部替换
|
|
|
static void takeFontOfSys(QWidget* pWx, bool bFamilyOnly = true);
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 特殊的Esc设置
|
|
|
void setIgnoreEsc(bool b);
|
|
|
bool getIgnoreEsc();
|
|
|
|
|
|
signals:
|
|
|
|
|
|
// 在关闭的消息函数中触发
|
|
|
void sigConfirmClosing(bool& bClosable);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 内部读写函数
|
|
|
virtual bool _writeCtrl(ZxSerializer* ser, QWidget* p, QString& sTag);
|
|
|
virtual bool _readCtrl(ZxSerializer* ser, QWidget*& p, QString& sTag);
|
|
|
|
|
|
protected slots:
|
|
|
|
|
|
virtual void slotIsUnableSP(bool& b);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// paint
|
|
|
virtual void paintEvent(QPaintEvent *);
|
|
|
// 窗体关闭的情形
|
|
|
virtual void closeEvent(QCloseEvent *);
|
|
|
|
|
|
// [20211213湛江专家测试反馈],压力流量视图,按esc键会退出
|
|
|
// 原因:父类 ZxUiBase 派生自QDiaglog的缘故
|
|
|
// 原先只在iGuiPlotPF进行处理,20240723移至本类
|
|
|
virtual void keyPressEvent(QKeyEvent* e);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 这是对子控件的统一管理,为了序列化
|
|
|
QMap<QString, QWidget*> m_mapCtrls;
|
|
|
|
|
|
// 对于部分特定参数的保存
|
|
|
QMap<QString, QVariant> m_mapOthers;
|
|
|
|
|
|
// 在序列化过程中,不能触发信号
|
|
|
bool m_bUnableSP;
|
|
|
|
|
|
// [20211213湛江专家测试反馈],压力流量视图,按esc键会退出
|
|
|
// 原因:父类 ZxUiBase 派生自QDiaglog的缘故
|
|
|
// 原先只在iGuiPlotPF进行处理,20240723移至本类
|
|
|
bool m_bIgnoreEsc;
|
|
|
|
|
|
// 是否启用新的样式表,ZXF202407
|
|
|
bool m_bNovelQss;
|
|
|
|
|
|
// 新增,是否自动绘制背景图 20260605
|
|
|
// 默认设为true,外部可改
|
|
|
// 当为true且m_bNovelQss为false且背景图片存在时,
|
|
|
// 则自动填充背景图
|
|
|
bool m_bAutoFillBackImg;
|
|
|
};
|