#include "widget.h"#include"./ui_widget.h"#include#include#include#includeWidget::Widget(QWidget*parent)
: QWidget(parent)
, ui(newUi::Widget)
{
ui->setupUi(this);
_data= new QList*>();
#ifndef SPLINE
_lines= new QList<:qlineseries>();#else_splines= new QList<:qsplineseries>();#endif_chart= newQtCharts::QChart();for(int i = 0; i< _lineNumber; i++)
{
#ifndef SPLINE
QtCharts::QLineSeries*s = newQtCharts::QLineSeries();
connect(s,&QtCharts::QLineSeries::clicked,[](const QPointF& pointF){qDebug()<
_lines->push_back(s);#elseQtCharts::QSplineSeries*s = newQtCharts::QSplineSeries();
connect(s,&QtCharts::QSplineSeries::clicked,[](const QPointF& pointF){qDebug()<
_splines->push_back(s);#endifs->setPointLabelsClipping(false);
s->setPointLabelsVisible(true);
s->setPointsVisible(true);
s->setPointLabelsFormat(QStringLiteral("(@xPoint,@yPoint)"));
s->setName(QString::fromStdString("温度")+QString::number(i));//文档说明使用OpenGL加速可以更快的的勾画并且支持更多的点,但是会缺乏一些显示功能相对与CPU渲染//s->setUseOpenGL(true);
qDebug()<useOpenGL();
_chart->addSeries(s);
}
_chart->setTitle(QString("曲线图"));
QtCharts::QValueAxis*x = newQtCharts::QValueAxis();
x->setRange(0, _x);
x->setTitleText(QString::fromStdString("min"));
x->setTickCount(30);
QtCharts::QValueAxis*y = newQtCharts::QValueAxis();
y->setRange(0, _y);
y->setTitleText(QString::fromStdString("摄氏度"));
y->setTickCount(20);
_chart->addAxis(x,Qt::AlignBottom);
_chart->addAxis(y,Qt::AlignLeft);for(int i = 0; i< _lineNumber; i++){
#ifndef SPLINE
(*_lines)[i]->attachAxis(x);
(*_lines)[i]->attachAxis(y);#else(*_splines)[i]->attachAxis(x);
(*_splines)[i]->attachAxis(y);#endif}
_chart->legend()->show();//_chart->createDefaultAxes();
_chartView = newQtCharts::QChartView(_chart);
_chartView->setRenderHint(QPainter::Antialiasing);//_chartView->setRubberBand(QtCharts::QChartView::RectangleRubberBand);
QHBoxLayout *h_layout = newQHBoxLayout();
h_layout->addWidget(_chartView);
setLayout(h_layout);
_timerid= startTimer(1000);
qsrand(QDateTime::currentDateTime().toTime_t());
}
Widget::~Widget()
{deleteui;
}void Widget::timerEvent(QTimerEvent *event) {if(event->timerId() ==_timerid)
{
QList *v_list = new QList();for (int i = 0; i < _lineNumber; i++) {float v = qrand() %_y;
v_list->push_back(v);
}
dataRefresh(v_list);
}
}void Widget::dataRefresh(QList *t) {if(_data->length() >=_x)
{
_data->clear();
#ifndef SPLINEfor(int i=0; i < _lines->length();i++)
{
(*_lines)[i]->clear();
}#else
for (int i = 0; i < _splines->length(); ++i) {
(*_splines)[i]->clear();
}#endif}
_data->push_back(t);for (int i = 0; i < _lineNumber; ++i) {
qDebug()<<_data->length()-1<last())[i];
#ifndef SPLINE
(*_lines)[i]->append((_data->length()-1),(*_data->last())[i]);#else(*_splines)[i]->append((_data->length()-1), (*_data->last())[i]);#endif}
qDebug()<< ++count;
}