#pragma once #include #include #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 *getMapCtrls(); virtual QMap *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内容 bool clearLayoutOf(QWidget* pWidget); bool clearLayout(QLayout* pLayout); bool setLayoutVisible(QLayout* pLayout, bool bVisible); 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 m_mapCtrls; // 对于部分特定参数的保存 QMap m_mapOthers; // 在序列化过程中,不能触发信号 bool m_bUnableSP; // [20211213湛江专家测试反馈],压力流量视图,按esc键会退出 // 原因:父类 ZxUiBase 派生自QDiaglog的缘故 // 原先只在iGuiPlotPF进行处理,20240723移至本类 bool m_bIgnoreEsc; // 是否启用新的样式表,ZXF202407 bool m_bNovelQss; };