[Qt] QtChart绘制曲线图基础入门笔记:包括坐标轴设置,数据更新

参考教程1

步骤:

  1. 安装
  2. 对pro文件进行设置,里面加上一行:QT += charts
  3. 引用:#include <QtCharts> using namespace QtCharts;
  4. 编译后,在ui文件中引用:#include <QtCharts> QT_CHARTS_USE_NAMESPACE
  5. 新建一个widget并提升为chartView
  6. 代码:给他一个sequerence
  7. 代码:设置坐标轴,隐藏图例,设置标题
  8. 代码:随着数据的更新,更新坐标轴设置

我安装QT的时候选择了Qt chart组件,就不用再安装啦。

设置pro文件

里面加上一行:QT += charts在这里插入图片描述

include

在用到的地方(mainwindow.h)加上

#include <QtCharts>  
using namespace QtCharts;

在这里插入图片描述

在编译生成的文件里加上include

先编译,会报错如下:
在这里插入图片描述
此时,双击这一行,会进入“ui_mainwindow.h”

里面加上这两行:

#include <QtCharts> 
QT_CHARTS_USE_NAMESPACE

新建一个widget并提升为QChartView

弄一个container里面的widget进去,调整大小。
在这里插入图片描述
右键,提升为:
在这里插入图片描述
输入提升的类名称如下图:
在这里插入图片描述

代码:

mainwindow.h里面加三个全局变量:

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QChart* chart ;
    QLineSeries *series;
    quint32 counter;

mainwindow.cpp里面:

chart = new QChart();
    series = new QLineSeries();
    counter = 0;
    for (counter = 0; counter < 100; counter++) {
        series->append(counter, sin(0.6f*counter));
    }
    chart->addSeries(series);

    chart->createDefaultAxes();        // (没有这个就不显示)基于已添加到图表的 series 来创建默认的坐标轴
    chart->setTitle("my chart");
    chart->legend()->hide(); //不然会有个点儿

    ui->my_chart->setChart(chart);
    ui->my_chart->resize(900,400);
    this->resize(1200,600);

更新数据

更新数据的步骤:

  1. 直接更新sequrence
  2. 相应的修改坐标轴范围

比如用一个按钮,点击更新:

void MainWindow::on_pushButton_clicked()
{
    printf("click");
    qDebug("q: click" );

    int count = series->points().size();
    counter +=1;
//    if (count >100)
//        {
//            series->remove(0);
//        }
    double lastX = series->at(series->points().size()-1).x();
    double lastY = series->at(series->points().size()-1).y();
    series->append(counter, lastY+1);
    qDebug("%d",series->points().size());

    chart->axisX()->setMax(counter);
    chart->axisY()->setMax(lastY+1);

    //ui->my_chart->resize(900+10*counter,400);
//    chart->update();
//    ui->my_chart->setChart(chart);

}

在这里插入图片描述

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 6.2 中,可以使用 QChart、QChartView、QLineSeries 和 QTimer 类来绘制动态曲线图,同时可以从数组获取数据更新坐标轴数据。 以下是一个示例代码,用于绘制动态曲线图并从数组获取数据: ```c++ #include <QtCharts/QChart> #include <QtCharts/QChartView> #include <QtCharts/QLineSeries> #include <QtCore/QRandomGenerator> #include <QtCore/QTimer> QT_CHARTS_USE_NAMESPACE int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建曲线数据 QLineSeries *series = new QLineSeries(); // 创建图表并将曲线数据添加到图表中 QChart *chart = new QChart(); chart->addSeries(series); // 设置图表的标题 chart->setTitle("Dynamic Line Chart"); // 创建坐标轴 QValueAxis *axisX = new QValueAxis(); axisX->setRange(0, 100); chart->addAxis(axisX, Qt::AlignBottom); series->attachAxis(axisX); QValueAxis *axisY = new QValueAxis(); axisY->setRange(0, 100); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY); // 创建图表视图,并将图表添加到视图中 QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); // 设置视图窗口大小 chartView->resize(800, 600); chartView->show(); // 创建计时器,用于更新曲线数据 QTimer timer; QObject::connect(&timer, &QTimer::timeout, [=]() { // 从数组获取随机数作为曲线数据 qreal y = QRandomGenerator::global()->bounded(100); static int x = 0; *series << QPointF(x, y); x++; // 更新坐标轴范围 if (series->count() > 100) { axisX->setRange(x - 100, x); } // 更新坐标轴和曲线数据 chart->axisX()->setRange(axisX->min(), axisX->max()); chart->axisY()->setRange(axisY->min(), axisY->max()); chart->update(); }); timer.start(100); return a.exec(); } ``` 在这个示例中,我们创建了一个静态数组 `data`,用于存储曲线数据。在计时器的 timeout 信号中,我们从数组中获取一个随机数,并将其添加到曲线数据中。同时,我们使用 `static int x = 0;` 来记录曲线数据的横坐标,并根据曲线数据的数量来更新坐标轴范围。 在更新坐标轴和曲线数据时,我们需要使用 `chart->axisX()->setRange(axisX->min(), axisX->max());` 和 `chart->axisY()->setRange(axisY->min(), axisY->max());` 来更新坐标轴,使用 `chart->update();` 来更新曲线数据。 当然,这只是一个简单的示例,你可以根据自己的需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值