DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DAFigureWidget.h
1#ifndef DAFIGUREWIDGET_H
2#define DAFIGUREWIDGET_H
3#include "DAFigureAPI.h"
4#include <QScrollArea>
5#include <QPainter>
6#include "DAChartWidget.h"
7#include "DAChartFactory.h"
8#include "DAColorTheme.h"
9// qt
10class QPaintEvent;
11class QFocusEvent;
12class QUndoCommand;
13class QUndoStack;
14class QKeyEvent;
15class QShowEvent;
16// qwt
17class QwtPlot;
18class QwtPlotCurve;
19class QwtPlotItem;
20class QwtFigure;
21class QwtPlotSeriesDataPickerGroup;
22namespace DA
23{
24class DAChartAxisRangeBinder;
25class DAFigureWidgetOverlay;
34class DAFIGURE_API DAFigureWidget : public QScrollArea
35{
36 Q_OBJECT
37 DA_DECLARE_PRIVATE(DAFigureWidget)
38public:
39 explicit DAFigureWidget(QWidget* parent = nullptr);
41 // 获取绘图窗口
42 QwtFigure* figure() const;
43 // id
44 QString getFigureId() const;
45 void setFigureId(const QString& id);
46 // 获取DAChartFactory
47 DAChartFactory* getChartFactory() const;
48 // 设置ChartFactory
49 void setupChartFactory(DAChartFactory* fac);
50 // 添加一个2D chart
51 DAChartWidget* createChart();
52 DAChartWidget* createChart(const QRectF& versatileSize);
53 DAChartWidget* createChart(float xVersatile, float yVersatile, float wVersatile, float hVersatile);
54 DAChartWidget* createChart_();
55 DAChartWidget* createChart_(const QRectF& versatileSize);
56 // 移除chart,但不会delete
57 void removeChart(DAChartWidget* chart);
58 void removeChart_(DAChartWidget* chart);
59 //
60
61 // 添加一个已有的chart
62 void addChart(DAChartWidget* chart, qreal xVersatile, qreal yVersatile, qreal wVersatile, qreal hVersatile);
63 void addChart(DAChartWidget* chart, const QRectF& versatileSize);
64 // 获取所有的图表(注意次获取没有顺序)
65 QList< DAChartWidget* > getCharts() const;
66
67 // 获取当前的2d绘图指针
68 DAChartWidget* getCurrentChart() const;
69 DAChartWidget* gca() const;
70 // 设置当前的2dplot
71 void setCurrentChart(QwtPlot* p);
72 // 获取当前的chart,如果没有current chart,或figure不存在chart,则创建一个新chart,此函数不返回nullptr
73 DAChartWidget* currentChart();
74 // 返回当前光标下的widget
75 QWidget* getUnderCursorWidget() const;
76 // 返回在当前光标下的2D图
77 DAChartWidget* getUnderCursorChart() const;
78 // 清空所有图 会连续发送chartRemoved信号,此函数会销毁chart对象
79 void clear();
80 // 设置画布背景色 - 支持redo-undo
81 void setBackgroundColor(const QBrush& brush);
82 void setBackgroundColor(const QColor& clr);
83 const QBrush& getBackgroundColor() const;
84 // 通过item查找对应的SAChart2D,如果没有返回nullptr
85 DAChartWidget* findChartFromItem(QwtPlotItem* item) const;
86 // 开启子窗口编辑模式
87 void setSubChartEditorEnable(bool enable = true);
88 DAFigureWidgetOverlay* getSubChartEditor() const;
89 // 判断是否在进行子窗口编辑
90 bool isEnableSubChartEditor() const;
91 // 获取图表的数量
92 int getChartCount() const;
93 // 获取默认的绘图颜色
94 virtual QColor getDefaultColor() const;
95 // 是否存在这个绘图
96 bool hasPlot(QwtPlot* chart, bool includeParasite = true) const;
97 // 绑定坐标轴范围,让follower的坐标轴范围跟随source
98 bool bindAxisRange(QwtPlot* source, QwtPlot* follower, QwtAxisId axisid);
99 bool bindAxisRange(QwtPlot* source, QwtAxisId sourceAxisid, QwtPlot* follower, QwtAxisId followerAxisid);
100 bool unbindAxisRange(QwtPlot* source, QwtPlot* follower, QwtAxisId axisid);
101 bool unbindAxisRange(QwtPlot* source, QwtAxisId sourceAxisid, QwtPlot* follower, QwtAxisId followerAxisid);
102 // 获取坐标轴绑定信息
103 QList< DAChartAxisRangeBinder* > getBindAxisRangeInfos() const;
104 // 设置联动数据拾取,联动数据拾取会让当前所有绘图的QwtPlotSeriesDataPicker建立分组,进行联动
105 void setDataPickerGroupEnabled(bool on);
106 bool isDataPickerGroupEnabled() const;
107 QwtPlotSeriesDataPickerGroup* getDataPickerGroup() const;
108 // 通过id查找qwtplot
109 QwtPlot* findPlotById(const QString& id, bool findParasite = true) const;
110 // 设置颜色主题
111 void setColorTheme(const DAColorTheme& th);
112 DAColorTheme getColorTheme() const;
113 const DAColorTheme& colorTheme() const;
114 DAColorTheme& colorTheme();
115 // 把当前绘图复制到剪切板
116 void copyToClipboard();
117
118public:
119 // figure的接口转接
120 // Get the normalized rectangle for a axes/获取绘图的归一化矩形
121 QRectF axesNormRect(QwtPlot* plot) const;
122 // Get the normalized rectangle for a child widget/获取子窗口的的归一化矩形
123 QRectF widgetNormRect(QWidget* w) const;
124 // Add a widget with normalized coordinates/使用归一化坐标添加widget
125 void addWidget(QWidget* widget, qreal left, qreal top, qreal width, qreal height);
126 void addWidget(QWidget* widget,
127 int rowCnt,
128 int colCnt,
129 int row,
130 int col,
131 int rowSpan = 1,
132 int colSpan = 1,
133 qreal wspace = 0.0,
134 qreal hspace = 0.0);
135 // 改变已经添加的窗口的位置占比,如果窗口还没添加,此函数无效
136 void setWidgetNormPos(QWidget* widget, const QRectF& rect);
137 // 获取在此坐标下的绘图,如果此坐标下没有,则返回nullptr,存在寄生轴情况只返回宿主轴
138 QwtPlot* plotUnderPos(const QPoint& pos) const;
139 void setFaceBrush(const QBrush& brush);
140 QBrush getFaceBrush() const;
141
142public:
143 // 绘图相关
144
145 // redo/undo的additem
146 bool addItem_(QwtPlotItem* item);
147 void addItem_(DAChartWidget* chart, QwtPlotItem* item);
148 // 支持redo/undo的addCurve,等同于gca()->addCurve
149 QwtPlotCurve* addCurve_(const QVector< QPointF >& xyDatas);
150 QwtPlotCurve* addScatter_(const QVector< QPointF >& xyDatas);
151 // 添加柱状图
152 QwtPlotBarChart* addBar_(const QVector< QPointF >& xyDatas);
153 QwtPlotIntervalCurve* addErrorBar_(const QVector< double >& values,
154 const QVector< double >& mins,
155 const QVector< double >& maxs);
156
157public:
158 // 推送一个命令
159 void push(QUndoCommand* cmd);
160 // 获取Undo Stack
161 QUndoStack* getUndoStack();
162
163Q_SIGNALS:
169
175
176 // 当前选中的发生改变
184
185protected:
186 void keyPressEvent(QKeyEvent* e);
187 void showEvent(QShowEvent* e);
188private slots:
189 // 窗口的位置发生改变槽
190 void onWidgetGeometryChanged(QWidget* w, const QRectF& oldNormGeo, const QRectF& newNormGeo);
191 // DAFigureOverlayChartEditor的激活窗口变化
192 void onOverlayActiveWidgetChanged(QWidget* oldActive, QWidget* newActive);
193 void onAxesAdded(QwtPlot* newAxes);
194 void onAxesRemoved(QwtPlot* removedAxes);
195 void onCurrentAxesChanged(QwtPlot* plot);
196 void onChartPropertyChanged(DA::DAChartWidget* chart, DAChartWidget::ChartPropertyChangeFlags flag);
197
198private:
199 void init();
200 // 建立DataPickerGroup
201 void setupDataPickerGroup();
202};
203
204DAFIGURE_API QDataStream& operator<<(QDataStream& out, const DAFigureWidget* p);
205DAFIGURE_API QDataStream& operator>>(QDataStream& in, DAFigureWidget* p);
206} // end DA namespace
207#endif // SAFIGUREWINDOW_H
DAFigureWidget持有一个ChartFactory,在添加Chart的时候,将调用DAChartFactory::createChart
Definition DAChartFactory.h:12
增强的Qwt图表控件,提供完整的数据绘图、样式设置和交互控制功能
Definition DAChartWidget.h:40
颜色主题
Definition DAColorTheme.h:15
DAFigureWidget编辑遮罩
Definition DAFigureWidgetOverlay.h:13
绘图窗口
Definition DAFigureWidget.h:35
void chartRemoved(DA::DAChartWidget *c)
绘图移除信号
void chartAdded(DA::DAChartWidget *c)
添加了chart
void currentChartChanged(DA::DAChartWidget *c)
当前的绘图发生了变更
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44