使用QT绘制简单的动态数据折线图

作者 : admin 本文共2214个字,预计阅读时间需要6分钟 发布时间: 2024-06-16 共1人阅读

两个核心类时QChart和QLineSeries

下面这个示例代码中,定时器每隔一段时间将曲线图中的数据点向右移动 一个单位,同时调整横坐标轴的范围,实现了一次滚动对应移动一个数据点的效果。

QLineSeries最多容纳4096+1024个点

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

QT_CHARTS_USE_NAMESPACE

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

    QMainWindow window;
    QChartView *chartView = new QChartView(&window);
    window.setCentralWidget(chartView);
    QChart *chart = new QChart();
    chart->legend()->hide();
    chartView->setChart(chart);
    chart->createDefaultAxes();

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


    QValueAxis *axisX = qobject_cast(chart->axes(Qt::Horizontal).at(0));
    QValueAxis *axisY = qobject_cast(chart->axes(Qt::Vertical).at(0));

    axisY->setRange(0, 120);

    // 初始化数据点
    qreal startX = 0;
    for (int i = 0; i append(startX + i, QRandomGenerator::global()->bounded(100));
    }

    int currentIndex = 0; // 当前数据点索引

    QTimer timer;
    timer.setInterval(100);
    QObject::connect(&timer, &QTimer::timeout, [&](){
        if (series->points().size() >= 4096 + 1024)
        {
            int n = series->points().size() - 4096;
            series->removePoints(0, n);
            currentIndex-= n;
            qDebug() << "remove " << n;
        }

        qDebug() <remove(0);
        series->append(series->points().last().x() + 1, QRandomGenerator::global()->bounded(100));

        // 计算滚动后的横坐标范围
        qreal minX = series->points().at(currentIndex).x();
        qreal maxX = series->points().last().x();
        qreal targetMinX = minX + 1;
        qreal targetMaxX = maxX + 1;
        axisX->setRange(targetMinX, targetMaxX);
        currentIndex++;

    });

    timer.start();

    window.resize(800, 600);
    window.show();

    return a.exec();
}

.pro文件

QT       += core gui charts

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp

HEADERS +=

TRANSLATIONS += \
    myChart_zh_CN.ts

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

使用QT绘制简单的动态数据折线图插图

本站无任何商业行为
个人在线分享 » 使用QT绘制简单的动态数据折线图
E-->