QCustomPlot实战使用一:实时曲线

没有介绍,全是干货

private:
	Ui_test *m_frm;        //app窗口
	QTimer dataTimer;      //定时器

private slots:
	void realtimeDataSlot();    //刷新曲线x、y轴数据的槽函数

private:
	void init_curve();            //初始化曲线的一些属性
void CTest::init_curve()    //初始化的时候做,建议只做一次,如果重复做,需要提前清空曲线的一些属性,不然会导致图例越来越多,轴重复等问题
{
	m_frm->my_curve->addGraph(); //增加一条曲线,从graph(0)开始
	m_frm->my_curve->graph(0)->setPen(QPen(Qt::blue));    //曲线线条颜色蓝色
	m_frm->my_curve->graph(0)->setName("曲线一");
	m_frm->my_curve->graph(0)->rescaleValueAxis(true, true);//y的极大值显示出来,此时y的极大值在最大范围处,顶到曲线最上方
	m_frm->my_curve->graph(0)->rescaleAxes();    //极大值调整向下l、

	m_frm->my_curve->addGraph(); // red line
	m_frm->my_curve->graph(1)->setPen(QPen(Qt::red));   
	m_frm->my_curve->graph(1)->setName("曲线二");


	m_frm->my_curve->xAxis->setTickLabelType(QCPAxis::ltDateTime);       //定义x轴的刻度为时间,既曲线类型为时间轴曲线
	m_frm->my_curve->xAxis->setDateTimeFormat("hh:mm:ss");    //x轴时间刻度格式
	m_frm->my_curve->xAxis->setAutoTickStep(false);
	m_frm->my_curve->xAxis->setTickStep(36);    //x轴每个刻度间隔36s
	m_frm->my_curve->axisRect()->setupFullAxesBox();

	connect(&dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot()));  //定时器timeout连接实时曲线刷新
	dataTimer.start(1);    //定时器的timeout时间为1ms,及每1ms刷新一次曲线
	m_frm->my_curve->legend->setVisible(true);        //图例可见,既曲线一与曲线二的图例自动生成,位置也可以调整,后面说怎么调
};
void CTest::realtimeDataSlot()    //实时更新曲线数据
{
	//key的单位是秒
	double key = QDateTime::currentDateTime().toMSecsSinceEpoch() / 1000.0;
    /*这里的代码是为了给两条曲线塞数据*/
	qsrand(QTime::currentTime().msec() + QTime::currentTime().second() * 10000);
	//使用随机数产生两条曲线
	double value0 = qrand() % 100;
	double value1 = qrand() % 80;
    
	m_frm->my_curve->graph(0)->addData(key, value0);//添加数据1到曲线1
	m_frm->my_curve->graph(1)->addData(key, value1);//添加数据2到曲线2
    //塞数据到这里为止


	//删除720秒之前的数据。这里的8要和下面设置横坐标宽度的8配合起来
	//才能起到想要的效果,可以调整这两个值,观察显示的效果。
	m_frm->my_curve->graph(0)->removeDataBefore(key - 720);
	m_frm->my_curve->graph(1)->removeDataBefore(key - 720);

	
	//自动设定graph(1)曲线y轴的范围,如果不设定,有可能看不到图像,手动设定也行,怎么设很简单
	m_frm->my_curve->graph(0)->rescaleValueAxis(true, true);
	m_frm->my_curve->graph(0)->rescaleAxes();
	m_frm->my_curve->graph(1)->rescaleValueAxis(true, true);
	m_frm->my_curve->graph(1)->rescaleAxes();


	//这里的8,是指横坐标时间宽度为720秒,这里多说两句,这里跟上面的720,就设置成一样的,能理解就自己理解,不能理解就照做。然后这里的720s为x轴整个宽度,配合上一段代码里的36,就会让x轴显示720/36=20个刻度。简单除法,自己看情况调整。
	m_frm->my_curve->xAxis->setRange(key + 0.25, 720, Qt::AlignVCenter);//设定x轴的范围
	
	m_frm->my_curve->replot();    //重画实现实时曲线刷新,照抄

}

当然要包含先将类提升为QCustomPlot,怎么提升百度吧,也不用赘述。

最后我放一张实战效果图吧

 没错,确实是d5000系统上开发的。涉及到敏感名称打点马赛克不过分吧,先这样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值