(续)Qt实现动态曲线作图

接上篇讲述的遗留问题继续,如何实现动态作图显示呢?实际上利用定时器动态更新坐标显示即可,这里主要的就是一个定时器程序!

实际上之前已经说过定时器QTimer说实话是一个超乎理解的存在,因为定时器这玩意我只在学习单片机(51)和Stm32的时候才用,用于一些特殊的设计或者是模块的数据采样(AD/DA)之类,现在能在界面编程里实现也挺意外,并且更加的好用

早说过!高度的封装性和接口的友好性还是很值的使用的,我一直对C++的理解是难学更加的难用!也确实是,不过熟能生巧!还是要多写代码同时多加练习,哦对了,C#就更加有点夸张,不过用多了也觉得没啥

QObject::connect(&m_timer, &QTimer::timeout, this, &MainWindow::handleTimeout);
m_timer.setInterval(500);

关联定时器中断函数,实则是定时触发,中断执行,这里要说的是,定时器类QTimer是在解析函数里定义(私有变量),同时进行配置和开启

m_timer.setInterval(500);
m_timer.start();

一旦该类初始化变量成功即开启定时器!中断源触发即进入中断函数执行,由于定时器是定义在该类内部,因此属于该类初始化变量的私有成分!附属于该类并依托类变量的行为执行,说到底还是封装

void MainWindow::handleTimeout()
{

    /*
     *
     *
    qreal x = chart->plotArea().width() / m_axisX->tickCount();

    qreal y = (m_axisX->max() - m_axisX->min()) / m_axisX->tickCount();
    m_x += y;
    m_y = QRandomGenerator::global()->bounded(5) - 2.5;

    *
    *
    */
    static double x_generate = 0;
    m_x = x_generate;
    m_y = sin(m_x);

    m_series->append(m_x, m_y);
    chart->scroll(m_x, 0);

    x_generate += 0.1;
}

此即中断处理函数,注释掉的是原先的显示代码,这里进行自己设计一波正弦函数的显示,引入头文件

#include <math.h>

之后直接使用正弦型函数即可,这里还用到了静态变量的累加作为横坐标的增量,纵坐标直接计算,最后进行添加即可

m_series->append(m_x, m_y);

根据坐标量移动坐标轴

chart->scroll(m_x, 0);

运行代码即可显示了,这里还有一个问题,当数据增加到1000多,没有图像显示,有时间再找找原因,总结起来就这么多!

发表评论

电子邮件地址不会被公开。 必填项已用*标注