QChart 多线程实现动态波形图表

版权声明:未经许可,请勿转载! https://blog.csdn.net/weixin_37204973/article/details/82468544

    看了网上几个例子,照着做,发现数据量大的时候,有点卡,所以这里使用双线程来做

# mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    series = new QLineSeries(this);
    //开启openGL
    series->setUseOpenGL(true);
    chart = new QChart();
    //添加线条
    chart->addSeries(series);
    //自动缩放
    chart->createDefaultAxes();
    //设置范围
    chart->axisY()->setRange(-10, 10);
    chart->axisX()->setRange(0, maxSize);
    //设置轴上字体
    chart->axisX()->setTitleText("Time/sec");
    chart->axisY()->setTitleText("Speed/m");
    //栅格不可见
    chart->axisX()->setGridLineVisible(false);
    chart->axisY()->setGridLineVisible(false);
    //隐藏图例
    chart->legend()->hide();
    //添加chart 入view
    ui->chartView->setChart(chart);
    //反走样
    ui->chartView->setRenderHint(QPainter::Antialiasing);

    work = new Work();
    QThread *thread = new QThread();
    work->moveToThread(thread);
    thread->start();
    connect(work, &Work::sendSeries, this, &MainWindow::slotUpdate);
    work->startInit();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::slotUpdate(QList<QPointF> data)
{
    series->replace(data);
}
# work.cpp
Work::Work(QObject *parent) : QObject(parent)
{    
    qRegisterMetaType<QList<QPointF>>("QList<QPointF>");
    connect(this, &Work::startInit, this, &Work::slotStartInit);
}

void Work::slotStartInit()
{
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &Work::processData);
    //开始定时器,定时刷新数据
    timer->start(5);
}

void Work::processData()
{
    //添加最新的数据到最后面
    data.append(QPointF(count , 10 * sin(M_PI * count * 4 / 180)));
    //删除第一个数据,以保证数据个数不会超出最大范围
    if (data.size() >= maxSize) {
        data.removeFirst();
    }
    QList<QPointF> _data;
    //将数据向x轴左移
    for(int loop = 0; loop < data.count(); loop++) {
        _data.append(QPointF(loop, data.at(loop).y()));
    }

    count++;
    //发送处理后的数据出去
    emit sendSeries(_data);
}

源文件地址

需求改动,功能增加,需要通过滚轮缩放波形,鼠标点击拖动曲线,代码里面有注释,就不在这里啰嗦了,
下面是工程地址
新工程地址

猜你喜欢

转载自blog.csdn.net/weixin_37204973/article/details/82468544