You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Include/iBase/iUtils/ZxDot.h

128 lines
2.5 KiB
C

#pragma once
#include <QVariant>
#include "Defines.h"
#include "ZxDynamic.h"
#include "IxSerDes.h"
#include "ZxSerializer.h"
#include "iBase_global.h"
#include "LlUtils_global.h"
// 该类ZxDot是实现绘制点的工具类主要提供了一种
// QVariant的自定义元数据的参照
class I_UTILSSHARED_EXPORT ZxDot
: virtual public IxDynObj
, virtual public IxSerDes
{
ZX_DECLARE_DYNAMIC
public:
ZxDot();
ZxDot(ZxDotType o, \
QColor clr = QColor(0, 0, 0), \
float r = 1.f, \
bool bFill = false);
~ZxDot();
#ifdef QT_DEBUG
// 专门测试函数,元数据,自定义
void testMetaTypeUsage();
#endif
public:
// operator abouts
ZxDot &operator = (const ZxDot &o);
bool operator == (const ZxDot &o) const;
bool operator != (const ZxDot &o) const
{
return !(operator == (o));
}
operator QVariant() const
{
return QVariant::fromValue(*this);
}
public:
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
public:
// 参数 set/get
ZxDotType style() const;
void setStyle(ZxDotType);
QColor color() const;
void setColor(const QColor &clr);
float radius() const;
void setRadius(const float& f);
bool isFilling() const;
void setFilling(const bool& b);
protected:
ZxDotType m_oType; //类型
QColor m_clr; //颜色
float m_fRadius; //半径
bool m_bFilling; //是否填充
};
Q_DECLARE_METATYPE(ZxDot) //宏定义
// QDebug << 重载
inline QDebug operator<< (QDebug debug, const ZxDot& o)
{
debug.nospace() << "ZxDot("
<< (int)(o.style()) << ","
<< o.color() << ","
<< o.radius() << ","
<< o.isFilling() << ")";
return debug.space();
}
// 序列化必须DataStream
inline QDataStream& operator<< (QDataStream& out, const ZxDot& o)
{
qRegisterMetaTypeStreamOperators<ZxDot>("ZxDot");
out << (int)(o.style());
out << o.color();
out << o.radius();
out << o.isFilling();
return out;
}
// 序列化必须DataStream
inline QDataStream& operator>> (QDataStream& in, ZxDot& o)
{
qRegisterMetaTypeStreamOperators<ZxDot>("ZxDot");
int n = 0;
in >> n;
o.setStyle((ZxDotType)n);
QColor clr(0, 0, 0);
in >> clr;
o.setColor(clr);
float r = 0.f;
in >> r;
o.setRadius(r);
bool b = false;
in >> b;
o.setFilling(b);
return in;
}