返回

QChart绘制实时波形图:带您领略数据之美

后端

绘制实时波形图:使用 Qt 的 QChart

创建 QChart 对象

首先,创建一个 QChart 对象,它是图表控件的基础。

QChart *chart = new QChart();

设置图表类型

接下来,根据需要选择图表类型,例如折线图或条形图。

chart->setChartType(QChart::LineChart);

添加数据系列

数据系列是一组数据点,可以通过 QLineSeries 对象添加。

QLineSeries *series = new QLineSeries();
chart->addSeries(series);

设置数据点

向数据系列中添加数据点,使用 QPointF 对象指定 X 和 Y 坐标。

series->append(QPointF(x, y));

设置坐标轴

坐标轴显示数据值,通过 QValueAxis 对象设置。

QValueAxis *xAxis = new QValueAxis();
chart->addAxis(xAxis, Qt::AlignBottom);

设置标题和标签

使用 QChart::setTitle() 设置图表标题,使用 QChart::setAxisTitle() 设置坐标轴标题,使用 QChart::setLegend() 设置图例。

chart->setTitle("实时波形图");

显示图表

将图表显示在窗口中,使用 QChartView 对象。

QChartView *chartView = new QChartView(chart);
chartView->show();

处理实时数据

使用 QTimer 定时更新数据。在 updateData() 槽函数中获取实时数据并更新数据系列。

QTimer *timer = new QTimer();
timer->setInterval(100);
timer->start();

connect(timer, SIGNAL(timeout()), this, SLOT(updateData()));

示例代码

#include <QChart>
#include <QChartView>
#include <QLineSeries>
#include <QValueAxis>
#include <QTimer>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建 QChart 对象
    QChart *chart = new QChart();

    // 设置图表类型
    chart->setChartType(QChart::LineChart);

    // 添加数据系列
    QLineSeries *series = new QLineSeries();
    chart->addSeries(series);

    // 设置坐标轴
    QValueAxis *xAxis = new QValueAxis();
    chart->addAxis(xAxis, Qt::AlignBottom);

    // 设置标题和标签
    chart->setTitle("实时波形图");

    // 显示图表
    QChartView *chartView = new QChartView(chart);
    chartView->show();

    // 处理实时数据
    QTimer *timer = new QTimer();
    timer->setInterval(100);
    timer->start();

    QObject::connect(timer, &QTimer::timeout, [series] {
        // 从硬件设备获取实时数据并更新数据系列
        double x = ...;  // X 坐标
        double y = ...;  // Y 坐标
        series->append(QPointF(x, y));
    });

    return app.exec();
}

常见问题解答

  1. 如何设置 X 轴和 Y 轴的范围?
    使用 QValueAxis::setRange() 方法。

  2. 如何添加多个数据系列?
    调用多次 chart->addSeries() 方法。

  3. 如何自定义图例?
    使用 QLegend 对象设置图例样式和内容。

  4. 如何保存图表为图像文件?
    使用 QChart::saveChart() 方法。

  5. 如何与其他 Qt 控件交互?
    使用 QChart::connectTo() 方法将图表信号连接到其他控件槽函数。