1#ifndef DACHARTSERIALIZE_H
2#define DACHARTSERIALIZE_H
3#include "DAFigureAPI.h"
8#include "qwt_samples.h"
10#include "DAChartPlotItemFactory.h"
19class QwtLinearColorMap;
20class QwtAlphaColorMap;
22class QwtSaturationValueColorMap;
25class QwtIntervalSymbol;
29class QwtPlotScaleItem;
30class QwtPlotLegendItem;
32class QwtPlotSpectroCurve;
33class QwtPlotIntervalCurve;
34class QwtPlotHistogram;
35class QwtPlotSpectrogram;
36class QwtPlotGraphicItem;
37class QwtPlotTradingCurve;
39class QwtPlotMultiBarChart;
40class QwtPlotShapeItem;
41class QwtPlotTextLabel;
43class QwtPlotVectorField;
52const std::uint32_t gc_dachart_magic_mark = 0x5A6B4CF1;
53const std::uint32_t gc_dachart_magic_mark2 = 0xAA123456;
54const std::uint32_t gc_dachart_magic_mark3 = 0x12345678;
55const std::uint32_t gc_dachart_magic_mark4 = 0xAAB23498;
56const QDataStream::Version gc_datastream_version = QDataStream::Qt_5_12;
65 const char* what()
const noexcept;
85 unsigned char byte[ 20 ];
98 using FpSerializeIn = std::function< QwtPlotItem*(
const QByteArray&) >;
107 static void registSerializeFun(
int rtti, FpSerializeIn fpIn,
FpSerializeOut fpOut);
114 static bool isSupportSerialize(
int rtti);
121 static FpSerializeIn getSerializeInFun(
int rtti)
noexcept;
134 QByteArray serializeOut(
const QwtPlotItem* item)
const;
135 QwtPlotItem* serializeIn(
const QByteArray&
byte)
const noexcept;
144 int getRtti(
const QByteArray&
byte)
const noexcept;
176 template<
typename T,
int RTTI >
179 return deserializeImpl< T >(
byte, RTTI);
182 template<
typename T >
183 static QByteArray serializeOut_T(
const QwtPlotItem* item)
185 return serializeImpl< T >(item);
190 template<
typename T >
191 static QwtPlotItem* deserializeImpl(
const QByteArray&
byte,
int expectedRtti)
193 QDataStream st(
byte);
194 st.setVersion(gc_datastream_version);
198 if (!h.isValid() || expectedRtti != h.rtti) {
202 QwtPlotItem* item = DAChartPlotItemFactory::createItem(expectedRtti);
204 st >>
static_cast< T*
>(item);
209 template<
typename T >
210 static QByteArray serializeImpl(
const QwtPlotItem* item)
213 QDataStream st(&
byte, QIODevice::WriteOnly);
214 st.setVersion(gc_datastream_version);
217 h.rtti = item->rtti();
218 st << h << static_cast< const T* >(item);
223 static QHash< int, std::pair< FpSerializeIn, FpSerializeOut > >& serializeFun();
231DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QFrame* f);
232DAFIGURE_API QDataStream& operator>>(QDataStream& in, QFrame* f);
235DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtText& t);
236DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtText& t);
238DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtSymbol* t);
239DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtSymbol* t);
241DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtIntervalSymbol* t);
242DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtIntervalSymbol* t);
244DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtColumnSymbol* t);
245DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtColumnSymbol* t);
248DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtScaleWidget* w);
249DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtScaleWidget* w);
251DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtScaleDraw* w);
252DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtScaleDraw* w);
255DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotItem* item);
256DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotItem* item);
258DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotCurve* item);
259DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotCurve* item);
261DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotGrid* item);
262DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotGrid* item);
264DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotScaleItem* item);
265DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotScaleItem* item);
267DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotLegendItem* item);
268DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotLegendItem* item);
270DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotMarker* item);
271DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotMarker* item);
273DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotSpectroCurve* item);
274DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotSpectroCurve* item);
276DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotBarChart* item);
277DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotBarChart* item);
279DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotIntervalCurve* item);
280DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotIntervalCurve* item);
283DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlotCanvas* c);
284DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlotCanvas* c);
286DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtColorMap* c);
287DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtColorMap* c);
289DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtLinearColorMap* c);
290DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtLinearColorMap* c);
292DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtAlphaColorMap* c);
293DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtAlphaColorMap* c);
295DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtHueColorMap* c);
296DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtHueColorMap* c);
298DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtSaturationValueColorMap* c);
299DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtSaturationValueColorMap* c);
301DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtPlot* chart);
302DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtPlot* chart);
305DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtIntervalSample& item);
306DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtIntervalSample& item);
308DAFIGURE_API QDataStream& operator<<(QDataStream& out,
const QwtInterval& item);
309DAFIGURE_API QDataStream& operator>>(QDataStream& in, QwtInterval& item);
Definition DAChartSerialize.h:59
针对QwtPlotItem的二进制序列化
Definition DAChartSerialize.h:75
std::function< QByteArray(const QwtPlotItem *) > FpSerializeOut
序列化为QByteArray函数
Definition DAChartSerialize.h:97
static QwtPlotItem * serializeIn_T(const QByteArray &byte)
模板化的序列化实现
Definition DAChartSerialize.h:177
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44
const int gc_dachart_version
< 版本标示,每个序列化都应该带有版本信息,用于对下兼容
Definition DAChartSerialize.h:51