完善曲线显示功能

This commit is contained in:
hm
2020-10-27 15:04:51 +08:00
parent 839bb9c0dc
commit d156ad663e
8 changed files with 2021 additions and 659 deletions
+79 -77
View File
@@ -246,9 +246,7 @@ void Chart::resizeEvent(QResizeEvent *e)
void Chart::timeout(void)//10Hz
{
timeseries += 0.1;
timeseries += updateTimer->interval() * 0.001f;
chartUpdate();
}
@@ -260,10 +258,6 @@ void Chart::chartUpdate(void)
//读取新数据,如果没有,那就保持
//当到达最大时(0.95),开始滚动
if(isScroll() == true)
{
@@ -272,9 +266,10 @@ void Chart::chartUpdate(void)
const double Max = axis->max();
if(timeseries > (Min + (Max - Min) * 0.95))
{
float err = timeseries - (Min + (Max - Min) * 0.95);
float err = (timeseries - (Min + (Max - Min) * 0.95));
chart()->axisX()->setRange(Min + err,Max + err);
}
}
@@ -284,71 +279,65 @@ void Chart::chartUpdate(void)
QValueAxis *axis = dynamic_cast<QValueAxis*>(chart()->axisX());
const double Min = axis->min();
const double Max = axis->max();
MaxCount = (Max - Min)/(updateTimer->interval() * 0.001) * 0.96;
MaxCount = (Max - Min)/0.1;
}
//自适应纵轴
QList<float> yMax;
QList<float> yMin;
//自适应纵轴
QList<float> yMax;
QList<float> yMin;
QList<QAbstractSeries *> slist = chart()->series();
for(QAbstractSeries *serie:slist)
{
QLineSeries *s = qobject_cast<QLineSeries *>(serie);
if(s)
QList<QAbstractSeries *> slist = chart()->series();
for(QAbstractSeries *serie:slist)
{
QVector<QPointF> pv = s->pointsVector();
//qDebug() << s->name() << pv;
float max = pv.at(0).y();
float min = pv.at(0).y();
foreach (QPointF p, pv) {
if(max < p.y())
{
max = p.y();
}
if(min > p.y())
{
min = p.y();
}
}
yMax.append(max);
yMin.append(min);
}
}
if((yMax.size() > 0)&&(yMin.size() > 0))
{
float maxValue = yMax.at(0);
foreach (float max, yMax) {
if(maxValue < max)
QLineSeries *s = qobject_cast<QLineSeries *>(serie);
if(s)
{
maxValue = max;
QVector<QPointF> pv = s->pointsVector();
//qDebug() << s->name() << pv;
float max = pv.at(0).y();
float min = pv.at(0).y();
foreach (QPointF p, pv) {
if(max < p.y())
{
max = p.y();
}
if(min > p.y())
{
min = p.y();
}
}
yMax.append(max);
yMin.append(min);
}
}
float minValue = yMin.at(0);
foreach (float min, yMin) {
if(minValue < min)
{
minValue = min;
if((yMax.size() > 0)&&(yMin.size() > 0))
{
float maxValue = yMax.at(0);
foreach (float max, yMax) {
if(maxValue < max)
{
maxValue = max;
}
}
float minValue = yMin.at(0);
foreach (float min, yMin) {
if(minValue < min)
{
minValue = min;
}
}
chart()->axisY()->setRange(minValue - qAbs(minValue - 1) * 0.1 ,maxValue + qAbs(maxValue + 1) * 0.1);
update();
}
/*
qDebug() << minValue - 5
<< maxValue + 5;
*/
chart()->axisY()->setRange(minValue - 5,maxValue + 5);
}
@@ -378,6 +367,8 @@ bool Chart::addSeries(QString name = tr("new"))
QLineSeries *s = new QLineSeries();
s->setColor(ColorMap::Color[ChannelIndex]);
s->setName(name);
s->setPointLabelsClipping(true);
s->pen().setStyle(Qt::SolidLine);
//s->append(timeseries,0);
s->setUseOpenGL(isOpenGL);
chart()->addSeries(s);
@@ -421,6 +412,8 @@ bool Chart::addSeries(QString name = tr("new"), int index = 0)
QLineSeries *s = new QLineSeries();
s->setColor(ColorMap::Color[ChannelIndex]);
s->setName(name);
s->setPointLabelsClipping(true);
s->pen().setStyle(Qt::SolidLine);
//s->append(timeseries,0);
s->setUseOpenGL(isOpenGL);
chart()->addSeries(s);
@@ -440,7 +433,7 @@ bool Chart::addSeries(QString name = tr("new"), int index = 0)
return isContain;
}
bool Chart::addSeries(QString name = tr("new"),QColor color = QColor("#FFFFFF"))
bool Chart::addSeries(QString name = tr("new"),QColor color = QColor("#FFFFFF"),Qt::PenStyle pen = Qt::PenStyle(Qt::SolidLine))
{
//查找有没有这个名字的序列
bool isContain = false;
@@ -458,6 +451,10 @@ bool Chart::addSeries(QString name = tr("new"),QColor color = QColor("#FFFFFF"))
QLineSeries *s = new QLineSeries();
s->setColor(color);
s->setName(name);
s->setPointLabelsClipping(true);
s->pen().setStyle(pen);
//s->append(timeseries,0);
s->setUseOpenGL(isOpenGL);
chart()->addSeries(s);
@@ -482,7 +479,7 @@ bool Chart::addSeries(QString name = tr("new"),QColor color = QColor("#FFFFFF"))
void Chart::setSerieData(QString name,QVariant data)
{
timeseries++;
//timeseries++;
//qDebug() << timeseries << timeseries;
//出新了比以前更大或者更小的值,那么就设置一下量程
@@ -494,8 +491,6 @@ void Chart::setSerieData(QString name,QVariant data)
const double Min = axis->min();
double FreeArea = (data.toDouble() - Min) * 0.1;
chart()->axisY()->setRange(Min, data.toDouble() + FreeArea);
}
else if(data.toDouble() < axis->min())
{
@@ -515,7 +510,23 @@ void Chart::setSerieData(QString name,QVariant data)
if(s->name() == name)
{
s->append(timeseries,data.toDouble());
if(isOperation() == false)
{
if(s->pointsVector().size() > MaxCount)
{
QList<QPointF> pv = s->points();
pv.removeFirst();
s->clear();
s->replace(pv);
//qDebug() << "remove()" << s->points().size() ;
}
}
isContain = true;
}
}
@@ -536,15 +547,6 @@ void Chart::setSerieData(QString name,QVariant data)
if(s->name() == name)
{
s->append(timeseries,data.toDouble());
if(isOperation() == false)
{
while(s->pointsVector().size() > MaxCount)
{
s->pointsVector().removeFirst();
}
}
}
}
}
+1 -1
View File
@@ -107,7 +107,7 @@ public slots:
bool addSeries(QString name);
bool addSeries(QString name,int index);
bool addSeries(QString name, QColor color);
bool addSeries(QString name, QColor color, Qt::PenStyle pen);
void removeSerie(QString name);
void removeAllSerie(void);
void setSerieData(QString name,QVariant data);