DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DADataManagerTreeModel.h
1#ifndef DADATAMANAGERTREEMODEL_H
2#define DADATAMANAGERTREEMODEL_H
3#include <functional>
4#include <QObject>
5#include <QStandardItemModel>
6#include "DAGuiAPI.h"
7#include "DAData.h"
8#include "DADataManager.h"
9class QMimeData;
10
14#ifndef DADATAMANAGERTREEMODEL_ROLE_DETAIL_DATA_TYPE
15#define DADATAMANAGERTREEMODEL_ROLE_DETAIL_DATA_TYPE (Qt::UserRole + 30)
16#endif
17
18namespace DA
19{
23class DAGUI_API DAStandardItemDataDataframe : public QStandardItem
24{
25public:
26 enum
27 {
28 Type = QStandardItem::UserType + 100 // 任意 >= UserType 的值
29 };
30 int type() const override
31 {
32 return Type;
33 }
34 explicit DAStandardItemDataDataframe(const DAData& data);
36 QVariant data(int role = Qt::UserRole + 1) const override;
37 // virtual void setData(const QVariant& value, int role = Qt::UserRole + 1) override;
38 // 获取dataframe
39 DAData getDataframe() const;
40 //
41 static bool isDataframeItem(QStandardItem* item);
42
43private:
44 DAData m_dataframe;
45};
46
50class DAGUI_API DAStandardItemDataDataframeSeries : public QStandardItem
51{
52public:
53 enum
54 {
55 Type = QStandardItem::UserType + 101 // 任意 >= UserType 的值
56 };
57 int type() const override
58 {
59 return Type;
60 }
61 explicit DAStandardItemDataDataframeSeries(const DAData& data, const QString& seriesName);
63 QVariant data(int role = Qt::UserRole + 1) const override;
64 // 获取dataframe
65 DAData getDataframe() const;
66 // 获取series
67 DAPySeries getSeries() const;
68 // series的名字
69 void setSeriesName(const QString& name);
70 QString getSeriesName() const;
71 // 判断是否是series
72 static bool isDataframeSeriesItem(QStandardItem* item);
73 // 获取描述文字
74 static QString makeDescribeText(const DAData& data, const QString& seriesName);
75 // 获取图标
76 static QIcon seriesTypeToIcon(const DAData& data, const QString& seriesName);
77
78private:
79 DAData m_dataframe;
80 QString m_name;
81};
82
86class DAGUI_API DADataManagerTreeModel : public QStandardItemModel
87{
88 Q_OBJECT
89 DA_DECLARE_PRIVATE(DADataManagerTreeModel)
90
91public:
96 {
97 DataFrameItem = 1,
98 SeriesInnerDataframe = 2
99 };
100
105 {
106 ColumnWithNameOnly = 1,
107 ColumnWithNameProperty
108 };
109
114 {
115 RoleItemType = Qt::UserRole + 10,
116 RoleDataId = Qt::UserRole + 20,
117 RoleDetailDataType = Qt::UserRole + 30
118 };
119
120public:
121 DADataManagerTreeModel(QObject* parent = nullptr);
122 DADataManagerTreeModel(DADataManager* dataMgr, QObject* parent = nullptr);
123 DADataManagerTreeModel(DADataManager* dataMgr, ColumnStyle style, QObject* parent = nullptr);
124 ~DADataManagerTreeModel() override;
125
126 // 设置数据管理器
127 void setDataManager(DADataManager* dataMgr);
128 DADataManager* getDataManager() const;
129
130 // DataFrame展开设置
131 void setExpandDataframeToSeries(bool on);
132 bool isExpandDataframeToSeries() const;
133
134 // 列样式设置
135 void setColumnStyle(ColumnStyle style);
136 ColumnStyle getColumnStyle() const;
137
138 // 数据查找
139 QStandardItem* findFirstDataframeItemByData(const DAData& data) const;
140
141 // 数据转换
142 static DAData itemToData(QStandardItem* item);
143
144 // 获取所有数据名称
145 QStringList getAllDataframeNames() const;
146
147 // 模型操作
148 void clear();
149
150 // 重写基类方法
156 // drag
157 virtual Qt::DropActions supportedDragActions() const override;
158 QStringList mimeTypes() const override;
159 virtual QMimeData* mimeData(const QModelIndexList& indexs) const override;
160
161 //
162 static bool isDataframeItem(QStandardItem* item);
163 static bool isDataframeSeriesItem(QStandardItem* item);
164 // 创建数据项
165 static QStandardItem* createDataItem(const DAData& data);
166 // 创建DataFrame的Series项
167 static QStandardItem* createDataFrameSeriesItem(const QString& seriesName, const DAData& dataframeData);
168
169protected:
170 // DataFrame展开处理
171 void updateDataFrameExpansion();
172 void updateDataFrameItemExpansion(QStandardItem* dataframeItem, bool expanded);
173 // 创建tooltip
174
175private:
176 void initialize();
177 void setupConnections();
178
179 // 数据项管理
180 void addDataItem(const DAData& data);
181 void removeDataItem(const DAData& data);
182 void updateDataItem(const DAData& data, DADataManager::ChangeType changeType);
183
184private slots:
185 void onDataAdded(const DAData& data);
186 void onDataBeginRemoved(const DAData& data, int index);
187 void onDataChanged(const DAData& data, DADataManager::ChangeType changeType);
188 void onDatasCleared();
189};
190
191// 以下是递归函数用于遍历
192bool standardItemIterator(QStandardItem* startItem,
193 std::function< bool(QStandardItem*, QStandardItem*) > fun,
194 bool firstColumnOnly = false);
195
196}
197
198#endif // DADATAMANAGERTREEMODEL_H
数据树模型,用于展示DADataManager中的数据
Definition DADataManagerTreeModel.h:87
ColumnStyle
列类型
Definition DADataManagerTreeModel.h:105
CustomRole
角色定义
Definition DADataManagerTreeModel.h:114
DetailDataTypeMark
特殊数据类型标记
Definition DADataManagerTreeModel.h:96
DAData的数据管理类,实现数据操作的一些通知例如数据添加、删除、改名、内容改变等等
Definition DADataManager.h:18
ChangeType
改变类型
Definition DADataManager.h:28
DAAbstractData的封装 可以放入QMap,QHash中,DAData的等于操作相当于创建一个引用
Definition DAData.h:25
对Pandas.Series的Qt封装
Definition DAPySeries.h:22
针对DAData的dataframe下的series的item
Definition DADataManagerTreeModel.h:51
针对DAData的dataframe的item
Definition DADataManagerTreeModel.h:24
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44