148 lines
4.0 KiB
C++
148 lines
4.0 KiB
C++
#include "ChartCurve.h"
|
||
#include <QValueAxis>
|
||
#include <QHBoxLayout>
|
||
#include "Chart.h"
|
||
#include "QTime"
|
||
|
||
ChartCurve::ChartCurve(QWidget *parent)
|
||
:ChartBaseSeries(parent)
|
||
{
|
||
|
||
}
|
||
|
||
|
||
void ReadData()
|
||
{
|
||
|
||
}
|
||
|
||
ChartCurve::~ChartCurve()
|
||
{
|
||
|
||
}
|
||
|
||
QList<CurvePar> ChartCurve::GetCuPar(CuParListModel index)
|
||
{
|
||
QList<CurvePar> cuPar;
|
||
switch (index)
|
||
{
|
||
case CUCHARTCURVE1:
|
||
{
|
||
QList<CurvePar> valueList;
|
||
QList<QPointF> point1;
|
||
qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); //不能放在循环里,否则容易出现很多相同随机数
|
||
for(int i = 0; i < 15; i++)
|
||
{
|
||
point1.append(QPointF(i + 1,qrand() % 100));
|
||
}
|
||
valueList.push_back(CurvePar{QColor(73,183,199),"",point1});
|
||
cuPar = valueList;
|
||
break;
|
||
}
|
||
case CUCHARTCURVE2:
|
||
{
|
||
QList<CurvePar> valueList;
|
||
QList<QPointF> point1;
|
||
qsrand(QTime(0,6,0).secsTo(QTime::currentTime())); //不能放在循环里,否则容易出现很多相同随机数
|
||
for(int i = 0; i < 15; i++)
|
||
{
|
||
point1.append(QPointF(i + 1,qrand() % 100));
|
||
}
|
||
valueList.push_back(CurvePar{QColor(96,79,121),"",point1});
|
||
cuPar = valueList;
|
||
break;
|
||
}
|
||
case CUCHARTCURVE3:
|
||
{
|
||
QList<CurvePar> valueList;
|
||
QList<QPointF> point1;
|
||
qsrand(QTime(0,0,3).secsTo(QTime::currentTime())); //不能放在循环里,否则容易出现很多相同随机数
|
||
for(int i = 0; i < 15; i++)
|
||
{
|
||
point1.append(QPointF(i + 1,qrand() % 100));
|
||
}
|
||
valueList.push_back(CurvePar{QColor(254,137,44),"",point1});
|
||
cuPar = valueList;
|
||
break;
|
||
}
|
||
}
|
||
return cuPar;
|
||
}
|
||
|
||
void ChartCurve::Init(QList<CurvePar> cuPar)
|
||
{
|
||
QHBoxLayout* mLayout = new QHBoxLayout();
|
||
mLayout->setSpacing(0);
|
||
mLayout->setContentsMargins(0,0,0,0);
|
||
|
||
QList<QAbstractSeries*> SeriesList;
|
||
for(int i = 0; i < cuPar.size(); i++)
|
||
{
|
||
QSplineSeries* lineSeries = InitLine(cuPar.at(i).Color,cuPar.at(i).name,cuPar.at(i).list);
|
||
SeriesList.push_back(lineSeries);
|
||
}
|
||
//生成图表
|
||
Chart* chart = new Chart();
|
||
chart->Set(_cPar);
|
||
chart->Set(_aPar);
|
||
chart->InitChart();
|
||
chart->InitAxis();
|
||
for(auto& i : SeriesList)
|
||
{
|
||
chart->addSeries(i);
|
||
chart->setAxisX(chart->axisX(),i);
|
||
chart->setAxisY(chart->axisY(),i);
|
||
}
|
||
chart->InitLegend();
|
||
|
||
//生成View
|
||
QChartView *chartView = new QChartView(chart);
|
||
chartView->setRenderHint(QPainter::Antialiasing);
|
||
|
||
mLayout->addWidget(chartView);
|
||
this->setLayout(mLayout);
|
||
}
|
||
|
||
void ChartCurve::SetPointShow(bool isShow)
|
||
{
|
||
isPointLabelShow = isShow;
|
||
}
|
||
|
||
QSplineSeries* ChartCurve::InitLine(QColor color,QString name, QList<QPointF> list)
|
||
{
|
||
QFont font;
|
||
font.setItalic(!font.italic());
|
||
font.setPointSizeF(15);
|
||
font.setFamily("微软雅黑");
|
||
|
||
QSplineSeries* lineSeries = new QSplineSeries();
|
||
//添加数据
|
||
lineSeries->append(list);
|
||
//设置线段的名称
|
||
lineSeries->setName(name);
|
||
//设置线段的颜色
|
||
lineSeries->setColor(QColor());
|
||
//设置线段是否可视话
|
||
lineSeries->setVisible(true);
|
||
//点标签文字是否可见
|
||
lineSeries->setPointLabelsVisible(isPointLabelShow);
|
||
//点标签字体
|
||
lineSeries->setPointLabelsFont(font);
|
||
//点标签颜色
|
||
lineSeries->setPointLabelsColor(QColor(color));
|
||
//点标签格式
|
||
lineSeries->setPointLabelsFormat("@yPoint");
|
||
//是否切割边缘点标签,默认为true
|
||
lineSeries->setPointLabelsClipping(true);
|
||
//设置点是否可视
|
||
lineSeries->setPointsVisible(true);
|
||
//设置笔
|
||
lineSeries->setPen(QPen(QBrush(color),2));
|
||
//使用opengl渲染
|
||
lineSeries->setUseOpenGL(true);
|
||
|
||
return lineSeries;
|
||
}
|
||
|
||
|