Initial commit (project based on widgets)

This commit is contained in:
Yury Shuvakin
2022-08-01 21:53:36 +03:00
parent d9396cdc2f
commit 14a7aa699f
411 changed files with 95119 additions and 0 deletions

219
visualizationchart.h Normal file
View File

@@ -0,0 +1,219 @@
#ifndef VISUALIZATIONCHART_H
#define VISUALIZATIONCHART_H
#include <iostream>
#include <QObject>
#include <QList>
#include <QMap>
#include <QQueue>
#include <QtCharts/QChartView>
#include <QtCharts/QBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QLineSeries>
#include <QtCharts/QSplineSeries>
#include <QtCharts/QLegend>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QValueAxis>
#include <QDebug>
#include <QLineF>
#include <QGraphicsSceneMouseEvent>
QT_CHARTS_USE_NAMESPACE
using namespace std;
class CircularQueue
{
public:
CircularQueue() = default;
CircularQueue(int offset, int step)
: mOffset(offset), mStep(step)
{}
void setSize(int size)
{
mSize=size;
}
void add(int v)
{
if(mQue.size() == mSize ) {
mQue.pop_front();
mQue.push_back(v);
}
else {
mQue.push_back(v);
}
auto mm = std::minmax_element(mQue.begin(), mQue.end());
mMin = *mm.first;
mMax = *mm.second;
}
int min()
{
return mMin;
}
int max()
{
return mMax;
}
int offset()
{
return mOffset;
}
void addOffset()
{
mOffset = mOffset + mStep;
}
QList<int>& container() { return mQue; }
private:
QList<int> mQue;
int mSize=1;
int mMin=0;
int mMax=0;
int mOffset = 10;
int mStep = 1;
};
class VisualizationChart : public QChart
{
Q_OBJECT
public:
VisualizationChart();
VisualizationChart(int w, int h, bool keepXGrowToTheRight = false, bool keepYFullRange = false);
VisualizationChart(int w, int h, int minY, int maxY, bool keepXGrowToTheRight = false, bool keepYFullRange = false);
void addSeriesWithNumber(int number, QString name, QColor color);
void getSeriesWithNumberNameAndColor(int number, QString &name, QColor &color);
void hideSeriesWithNumber(int number);
void showSeriesWithNumber(int number);
QSplineSeries & getSeries();
QSplineSeries &getSplineSeries();
void appendPointToSeries(int serNum, const QPointF point);
void appendNextX();
void appendYToSeries(int serNum, const qreal y);
void refreshSeries(int serNum);
void append(const QPointF point);
void append(const qreal x, const qreal y);
void append(const qreal y);
VisualizationChart &operator+=(const QPointF point);
VisualizationChart &operator+=(const qreal y);
VisualizationChart &operator<<(const QPointF point);
VisualizationChart &operator<<(const qreal y);
void setTitleForX(QString s);
void setTitleForY(QString s);
signals:
void sendSecs(int secs);
protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
void show15MinutesXIntervalNearCursor(QGraphicsSceneHoverEvent *event);
void showCoordinatesNearCursor(QGraphicsSceneHoverEvent *event);
void showUpdatedCoordinatesNearCursor(QGraphicsSceneHoverEvent *event);
private:
int mW = 0;
int mH = 0;
int xi = 0;
const int xeps = 0;
// const int yeps = 10;
const int yeps = 500;
int mMaxY = 60;
int mMinY = -60;
int mRangeY = mMaxY - mMinY;
int mMinYExtraPixelsUnderMinimumY = 1;
int mMaxYExtraPixelsOverMaximumY = 1;
int xlimit = (60 * 3) + 2; //10 + 2;
//int xlimit = (60 * 3) + 2; //10 + 2;
//int xlimit = 150;
int xmin, xmax;
int ymin, ymax;
//
bool mMakeXaxisLengtGrowToTheRightAccordingIncommingXdata = false;
bool mMakeYaxisLengtAutoResizeAccordingIncommingYdata = true;
CircularQueue mQue;
QValueAxis *axisX;
QValueAxis *axisY;
QMap<int , QSplineSeries *> mSeriesMap;
//QSplineSeries* getSplineSeries(int num);
QSplineSeries* getSplineSeries(int num);
QColor getSplineSeriesColor(int num);
//QSplineSeries *ssMax;
//QSplineSeries *ssMid;
//QSplineSeries *ssMin;
QColor getFirstSeriesColor();
QColor getSecondSeriesColor();
QColor getThirdSeriesColor();
QGraphicsTextItem *mChartYTitle;
QGraphicsTextItem *mChartXTitle;
QVector<QGraphicsLineItem *> mlinesHoriz;
QGraphicsLineItem *m_lineHoriz1;
QGraphicsLineItem *m_lineHoriz2;
QGraphicsLineItem *m_lineHoriz3;
QGraphicsLineItem *m_lineHoriz4;
QGraphicsLineItem *m_lineHoriz5;
QGraphicsLineItem *m_lineHorizX;
QVector<QGraphicsTextItem *> mTextsHoriz;
QGraphicsTextItem *mTextHoriz1;
QGraphicsTextItem *mTextHoriz2;
QGraphicsTextItem *mTextHoriz3;
QGraphicsTextItem *mTextHoriz4;
QGraphicsTextItem *mTextHoriz5;
QGraphicsLineItem *m_lineVert1;
QGraphicsLineItem *m_lineVert2;
QGraphicsLineItem *m_lineVert3;
QGraphicsLineItem *m_lineVert4;
QGraphicsLineItem *m_lineVert5;
QGraphicsLineItem *m_lineVert6;
QGraphicsTextItem *mTextVert1;
QGraphicsTextItem *mTextVert2;
QGraphicsTextItem *mTextVert3;
QGraphicsTextItem *mTextVert4;
QGraphicsTextItem *mTextVert5;
QGraphicsTextItem *mTextVert6;
QGraphicsLineItem *mLineLegendWhiteBackground;
QGraphicsLineItem *m_lineVert;
QGraphicsTextItem *m_lineVertText;
QGraphicsSimpleTextItem *m_coordX;
QGraphicsSimpleTextItem *m_coordY;
void initChart();
void initChartOld();
};
#endif // VISUALIZATIONCHART_H