1#ifndef DAXMLFILEINTERFACE_H
2#define DAXMLFILEINTERFACE_H
14#include <QVersionNumber>
15#include "da_qstring_cast.h"
17#ifndef DAXMLFILEINTERFACE_POD_NUMBER_H
18#define DAXMLFILEINTERFACE_TYPE_MAKE_H(pod_type) \
19 static QDomElement makeElement(const pod_type& v, const QString& tagName, QDomDocument* doc); \
20 static bool loadElement(pod_type& p, const QDomElement* ele);
34 virtual bool saveToXml(QDomDocument* doc, QDomElement* parentElement,
const QVersionNumber& ver)
const = 0;
35 virtual bool loadFromXml(
const QDomElement* parentElement,
const QVersionNumber& ver) = 0;
39 DAXMLFILEINTERFACE_TYPE_MAKE_H(
short)
40 DAXMLFILEINTERFACE_TYPE_MAKE_H(
unsigned short)
41 DAXMLFILEINTERFACE_TYPE_MAKE_H(
int)
42 DAXMLFILEINTERFACE_TYPE_MAKE_H(
unsigned int)
43 DAXMLFILEINTERFACE_TYPE_MAKE_H(
long)
44 DAXMLFILEINTERFACE_TYPE_MAKE_H(
unsigned long)
45 DAXMLFILEINTERFACE_TYPE_MAKE_H(
long long)
46 DAXMLFILEINTERFACE_TYPE_MAKE_H(
unsigned long long)
47 DAXMLFILEINTERFACE_TYPE_MAKE_H(
double)
48 DAXMLFILEINTERFACE_TYPE_MAKE_H(
float)
49 DAXMLFILEINTERFACE_TYPE_MAKE_H(std::string)
52 DAXMLFILEINTERFACE_TYPE_MAKE_H(QString)
53 DAXMLFILEINTERFACE_TYPE_MAKE_H(QColor)
54 DAXMLFILEINTERFACE_TYPE_MAKE_H(QRect)
55 DAXMLFILEINTERFACE_TYPE_MAKE_H(QRectF)
56 DAXMLFILEINTERFACE_TYPE_MAKE_H(QPoint)
57 DAXMLFILEINTERFACE_TYPE_MAKE_H(QPointF)
58 DAXMLFILEINTERFACE_TYPE_MAKE_H(QPen)
59 DAXMLFILEINTERFACE_TYPE_MAKE_H(QBrush)
60 DAXMLFILEINTERFACE_TYPE_MAKE_H(QFont)
61 DAXMLFILEINTERFACE_TYPE_MAKE_H(QVector3D)
62 DAXMLFILEINTERFACE_TYPE_MAKE_H(QVariant)
66 template<
typename std_container_like >
67 static QDomElement makeElement(
const std_container_like& v,
const QString& tagName, QDomDocument* doc);
68 template<
typename std_container_like >
69 static bool loadElement(std_container_like& v,
const QDomElement* ele);
73 static QDomElement makeSysInfoElement(
const QString& tagName, QDomDocument* doc);
76 static void appendElementWithText(QDomElement& parent,
const QString& tagName,
const QString& text, QDomDocument* doc);
79#ifndef DAXMLELEMENTSERIALIZATION_INOUT_H
80#define DAXMLELEMENTSERIALIZATION_INOUT_H(type) \
81 DAXMLElementSerialization& operator<<(const type& t); \
82 DAXMLElementSerialization& operator>>(type& t);
111 DAXMLELEMENTSERIALIZATION_INOUT_H(
short)
112 DAXMLELEMENTSERIALIZATION_INOUT_H(
unsigned short)
113 DAXMLELEMENTSERIALIZATION_INOUT_H(
int)
114 DAXMLELEMENTSERIALIZATION_INOUT_H(
unsigned int)
115 DAXMLELEMENTSERIALIZATION_INOUT_H(
long)
116 DAXMLELEMENTSERIALIZATION_INOUT_H(
unsigned long)
117 DAXMLELEMENTSERIALIZATION_INOUT_H(
long long)
118 DAXMLELEMENTSERIALIZATION_INOUT_H(
unsigned long long)
119 DAXMLELEMENTSERIALIZATION_INOUT_H(
double)
120 DAXMLELEMENTSERIALIZATION_INOUT_H(
float)
121 DAXMLELEMENTSERIALIZATION_INOUT_H(std::string)
122 DAXMLELEMENTSERIALIZATION_INOUT_H(QString)
123 DAXMLELEMENTSERIALIZATION_INOUT_H(QColor)
124 DAXMLELEMENTSERIALIZATION_INOUT_H(QRect)
125 DAXMLELEMENTSERIALIZATION_INOUT_H(QRectF)
126 DAXMLELEMENTSERIALIZATION_INOUT_H(QPoint)
127 DAXMLELEMENTSERIALIZATION_INOUT_H(QPointF)
128 DAXMLELEMENTSERIALIZATION_INOUT_H(QPen)
129 DAXMLELEMENTSERIALIZATION_INOUT_H(QBrush)
130 DAXMLELEMENTSERIALIZATION_INOUT_H(QFont)
131 DAXMLELEMENTSERIALIZATION_INOUT_H(QVector3D)
132 DAXMLELEMENTSERIALIZATION_INOUT_H(QVariant)
135 QDomElement* mParentElement {
nullptr };
136 QDomElement mCurrentElement;
139template<
typename std_container_like >
143 auto ele = doc->createElement(tagName);
144 ele.setAttribute(
"class", QString(
"%1").arg(
typeid(std_container_like).name()));
145 ele.setAttribute(
"size", v.size());
146 for (
const auto& r : v) {
147 auto eleR = doc->createElement(
"r");
148 auto textNode = doc->createTextNode(
toQString(r));
149 eleR.appendChild(textNode);
150 ele.appendChild(eleR);
155template<
typename std_container_like >
158 using T =
typename std_container_like::value_type;
160 auto size = ele->attribute(
"size").toUInt(&isok);
165 auto cns = ele->childNodes();
166 for (
int i = 0; i < cns.size(); ++i) {
167 auto rEle = cns.at(i).toElement();
168 if (rEle.tagName() !=
"r") {
197DAUTILS_API QVariant
stringToVariant(
const QString& var,
const QString& typeName);
212template<
typename T >
215 if (var.canConvert< T >()) {
217 QDataStream st(&
byte, QIODevice::ReadWrite);
218 T ba = var.value< T >();
220 return (QString(
byte.toBase64()));
230template<
typename T >
233 QByteArray
byte = QByteArray::fromBase64(base64.toLocal8Bit());
234 QDataStream st(&
byte, QIODevice::ReadWrite);
238 return (QVariant::fromValue(ba));
针对xml文件序列化,实现类似二进制文件一样<<和>>的序列化
Definition DAXMLFileInterface.h:106
所有支持xml文件保存的类继承于它,从而提供saveToXml和loadFromXml接口
Definition DAXMLFileInterface.h:29
static QDomElement makeElement(const std_container_like &v, const QString &tagName, QDomDocument *doc)
生成一个文本
Definition DAXMLFileInterface.cpp:151
static bool loadElement(std_container_like &v, const QDomElement *ele)
加载文本
Definition DAXMLFileInterface.cpp:167
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44
DAUTILS_API QString doubleToString(double a)
把double转换为字符串,并且尽量不丢失精度,不会转换为xxe-5这样的情况
Definition DAXMLFileInterface.cpp:1401
QVariant converBase64StringToVariant(const QString &base64)
把Base64字符转换为对应变量
Definition DAXMLFileInterface.h:231
DAUTILS_API QString variantToString(const QVariant &var)
QVariant转为QString
Definition DAXMLFileInterface.cpp:775
bool getStringIntValue(const QString &valuestring, int &v)
获取int值
Definition DAXMLFileInterface.cpp:717
bool getStringUIntValue(const QString &valuestring, unsigned int &v)
获取unsigned int值
Definition DAXMLFileInterface.cpp:730
QString converVariantToBase64String(const QVariant &var)
把QVariant转换为Base64字符
Definition DAXMLFileInterface.h:213
bool getStringBoolValue(const QString &valuestring)
获取为bool类型
Definition DAXMLFileInterface.cpp:768
bool getStringULongLongValue(const QString &valuestring, unsigned long long &v)
获取unsigned ll值
Definition DAXMLFileInterface.cpp:743
DAUTILS_API QVariant stringToVariant(const QString &var, const QString &typeName)
variantToString的逆方法
Definition DAXMLFileInterface.cpp:1059
bool getStringRealValue(const QString &valuestring, qreal &v)
获取qreal值
Definition DAXMLFileInterface.cpp:756
QString toQString(const T &value)
toQString
Definition da_qstring_cast.h:71
bool fromQString(const QString &str, T &result)
将QString转换为类型T,通过引用返回转换结果,并返回一个bool值表示转换是否成功
Definition da_qstring_cast.h:117