本文将使用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之间的数 //获取初始化的qchart QChart *qchart =(QChart *)ui->graphicsView->chart(); //获取之前的ser QLineSeries *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")); }