本文将使用QT实现一个简单的动态实时曲线,将来可以把数据收集起来,做成一个可视化的曲线
效果图
1. 创建好工程之后,在.Pro文件增加 charts
2. 在设计里,拖动一个 Graphics View ,然后提升为QChartView
3. 添加头文件和命名空间
4. 创建表
//创建表void MainWindow::CreatCharts(){QChart *qchart = new QChart;//把chart放到容器里ui->graphicsView->setChart(qchart);//设置抗锯齿ui->graphicsView->setRenderHint(QPainter::Antialiasing);//创建两条线QLineSeries *ser0 = new QLineSeries;QLineSeries *ser1 = new QLineSeries;//设置名字ser0->setName("ser0");ser1->setName("ser1");//放入charts里qchart->addSeries(ser0);qchart->addSeries(ser1);//创建x坐标QDateTimeAxis *QaX = new QDateTimeAxis;//格式QaX->setFormat("hh:mm:ss");QaX->setTickCount(10);QaX->setTitleText("time");//创建y坐标QValueAxis *QaY = new QValueAxis;//设置范围QaY->setRange(-1,1);QaY->setTickCount(6);//将线条放入表中qchart->setAxisX(QaX,ser0);qchart->setAxisY(QaY,ser0);qchart->setAxisX(QaX,ser1);qchart->setAxisY(QaY,ser1);}
5. 当前效果
6. 接下来要把曲线画上去创建QTimer类
7. 创建定时器、槽函数,1s给数据刷新一次
8. 数据更新
//数据更新void MainWindow::RefreshTime_Slot(){//获取当前时间QDateTime currentTime = QDateTime::currentDateTime();//获取随机数qsrand(QTime::currentTime().second());int rand = qrand()%100;//获取0~10之间的数//获取初始化的qchartQChart *qchart =(QChart *)ui->graphicsView->chart();//获取之前的serQLineSeries *ser0 = (QLineSeries *)ui->graphicsView->chart()->series().at(0);QLineSeries *ser1 = (QLineSeries *)ui->graphicsView->chart()->series().at(1);//更新数据ser0->append(currentTime.toMSecsSinceEpoch(),cos(rand));ser1->append(currentTime.toMSecsSinceEpoch(),sin(rand));qchart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-1*30));qchart->axisX()->setMax(QDateTime::currentDateTime().addSecs(1*30));ui->label->setText(QTime::currentTime().toString("hh:mm:ss"));}