DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DAData.h
1#ifndef DADATA_H
2#define DADATA_H
3#include <QtCore/qglobal.h>
4#include "DADataAPI.h"
5#include "DAAbstractData.h"
6#if DA_ENABLE_PYTHON
7#include "pandas/DAPyDataFrame.h"
8#endif
9
10namespace DA
11{
12class DADataManager;
24class DADATA_API DAData
25{
26 friend class DADataManager;
27
28public:
29 using Pointer = DAAbstractData::Pointer;
30 using IdType = DAAbstractData::IdType;
31
32public:
33 DAData();
34 virtual ~DAData();
35 DAData(const DAData& d);
36 DAData(DAData&& d);
37 DAData(const DAAbstractData::Pointer& d);
38 // 注意这个等于只是判断指针等于,不是对值进行操作
39 bool operator==(const DAData& d) const;
40 bool operator!=(const DAData& d) const;
41 bool operator<(const DAData& d) const;
42 DAData& operator=(const DAData& d);
43 operator bool() const;
44 // 是否为空
45 bool isNull() const;
46
47public:
48#if DA_ENABLE_PYTHON
49 // 以下操作符是为了实现业务的快速响应,会带来一定的耦合
50 DAData(const DAPyDataFrame& d);
51 DAData(const DAPySeries& d);
52 // 直接从 Python 对象(如 pandas df)构造,这里不允许隐式转换
53 explicit DAData(pybind11::object obj);
54
55 DAData& operator=(const DAPyDataFrame& d);
56 DAData& operator=(const DAPySeries& d);
57#endif
58public: // DAAbstractData Wrapper
59 DAAbstractData::DataType getDataType() const;
60 // 变量值操作
61 QVariant value(std::size_t dim1, std::size_t dim2) const;
62 bool setValue(std::size_t dim1, std::size_t dim2, const QVariant& v) const;
63 // 变量名操作
64 QString getName() const;
65 void setName(const QString& n);
66 // 变量描述
67 QString getDescribe() const;
68 void setDescribe(const QString& d);
69 // 返回原始指针
70 DAAbstractData* rawPointer();
71 const DAAbstractData* rawPointer() const;
72 // 返回智能指针
73 Pointer getPointer();
74 const Pointer getPointer() const;
75 // 获取id
76 IdType id() const;
77 // 是否为dataframe
78 bool isDataFrame() const;
79 bool isSeries() const;
80 // 是否为datapackage
81 bool isDataPackage() const;
82#if DA_ENABLE_PYTHON
83 // 转换为pyDataframe
84 DAPyDataFrame toDataFrame() const;
85 DAPySeries toSeries() const;
86 // 转换为python对象
87 pybind11::object toPyObject() const;
88 // 设置python对象,此函数会替换掉数据管理的对象内容
89 void setPyObject(const pybind11::object& obj);
90#endif
91 // 数据类型转换为文字
92 QString typeToString() const;
93 // 获取数据对应的datamanager
94 DADataManager* getDataManager() const;
95 // 是否在数据管理器中管理
96 bool isHaveDataManager() const;
97 // 尺寸
98 std::pair< std::size_t, std::size_t > shape() const;
99
100public:
101 // 把数据写到文件
102 static bool writeToFile(const DAData& data, const QString& filePath);
103 // 导出数据
104 static bool exportToFile(const DAData& data, const QString& filePath, const QString& sep = ",");
105
106protected:
107 // 设置变量管理器,在data添加如变量管理器后,data内部就会维护变量管理器的指针
108 void setDataManager(DADataManager* mgr);
109
110private:
111 DAAbstractData::Pointer mData;
112 DADataManager* mDataMgr;
113};
114// ADL原则,需要把qHash也放入DA命名空间中
115#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
116DADATA_API uint qHash(const DA::DAData& key, uint seed);
117#else
118DADATA_API std::size_t qHash(const DA::DAData& key, std::size_t seed);
119#endif
120} // namespace DA
121
122Q_DECLARE_METATYPE(DA::DAData)
123#endif // DADATA_H
DA 的数据基类
Definition DAAbstractData.h:16
uint64_t IdType
id类型
Definition DAAbstractData.h:19
DataType
Definition DAAbstractData.h:22
DAData的数据管理类,实现数据操作的一些通知例如数据添加、删除、改名、内容改变等等
Definition DADataManager.h:18
DAAbstractData的封装 可以放入QMap,QHash中,DAData的等于操作相当于创建一个引用
Definition DAData.h:25
非模板类的DataFrame
Definition DAPyDataFrame.h:19
对Pandas.Series的Qt封装
Definition DAPySeries.h:22
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44