完善曲线显示功能
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user