QT——Qcharts绘制实时曲线

本文将使用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"));

}

猜你喜欢

转载自blog.csdn.net/qq_53734051/article/details/126872728
今日推荐