#pragma once #include #include "Defines.h" #include "IxSerDes.h" #include "iXmlBase_global.h" class QDomNode; class QDomElement; class QDomDocument; class ZxSerializer; // 单一节点 class I_XML_BASE_EXPORT iXmlItemBase : public QObject, \ virtual public IxSerDes { Q_OBJECT public: iXmlItemBase(); ~iXmlItemBase(); protected: // 初始化Tag virtual void initXmlTags(); public: // 解析xml节点到List virtual void parseInfo(const QDomElement& e); // 把List分配到成员变量 // 输入开始的m_listValues中index,并且返回下一个index virtual int allocateInfo(int nIndex); // 备份恢复 virtual bool saveBk(); virtual bool restoreBk(); // 序列化 virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); // 写入xml virtual void writeInfo(QDomElement& e, QDomDocument &doc); // 初始化孩子节点,对于组(父级)需要实现该函数 virtual iXmlItemBase* createChild(); // 节点层级关系 virtual void appenChild(iXmlItemBase* p); iXmlItemBase* getChildAt(int n); int getChildrenCount(); QStringList childrenNames(); int childIndex(QString sName); void setParent(iXmlItemBase* p); iXmlItemBase* getParent(); // clear virtual void clear(); protected: //主要检查是否数据 void checkStrToDigit(QString s, double& f); void checkStrToDigit(QString s, int& n); public: QString m_sID; //ID QString m_sName; //字段 QString m_sAlias; //别名 QString m_sTips; //说明/备注 QString m_sWhatThis;//辅助信息,可以是任意信息 protected: // XML标签,需与成员变量严格对应 QStringList m_listTags; // XML标签对应的数据,需与成员变量严格对应 QStringList m_listValues; // 备份:XML标签对应的数据,需与成员变量严格对应 QStringList m_listValuesBk; // 对于父子关系的处理 QVector m_vecChildren; iXmlItemBase* m_pParent; // 临时,固定 QString m_sChildTag; //写入XML时,孩子节点标签 }; typedef QVector vecXmlItemsPtr;