大年三十了,祝大家新年快乐,万事如意!
这个鸟东西,刚接触还不是那么容易显示时间,csdn上一大堆基本都是错误的,我这一点心得分享下。
1、首先有2种类可以设置时间标签:
QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime); timeTicker->setTimeFormat("%h:%m:%s"); ui->widCapGraphics->xAxis->setTicker(timeTicker); 还有种: QSharedPointer<QCPAxisTickerDateTime> timeTicker(new QCPAxisTickerDateTime); timeTicker->setDateTimeFormat("hh:mm:ss"); ui->widCapGraphics->xAxis->setTicker(timeTicker);
注意,这2个鬼类的时间格式是不一样的,一个带%,一个是标准的qt
2、我们要知道图表刷新的周期单位,比如毫秒、秒、天,先用秒作单位,刷新周期是1秒:
初始化:
// 设置x轴为时间 QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime); timeTicker->setTimeFormat("%h:%m:%s"); //设置x轴有20个坐标,这个没用,要另一个策略函数配合 //timeTicker->setTickCount(20); ui->widCapGraphics->xAxis->setTicker(timeTicker); ui->widCapGraphics->xAxis->setTickLabels(true); //设置x轴名称 ui->widCapGraphics->xAxis->setLabel("时间");
添加数据的时候,x坐标一定是时间,如果是随意的点,那么就显示不正常了:
// 声明时间获取变量,实际情况中,获取的是当前时间的总秒数 int nowtime = (QTime::currentTime().hour()*60+QTime::currentTime().minute())*60+QTime::currentTime().second(); //设置x轴范围,实际情况设置的是5秒之内的数据 ui->widCapGraphics->xAxis->setRange(nowtime-5,nowtime); mGraph1->addData(nowtime, qSin(mGraph1->dataCount()/50.0)+qSin(mGraph1->dataCount()/50.0/0.3843)*0.25); mGraph2->addData(nowtime, qCos(mGraph2->dataCount()/50.0)+qSin(mGraph2->dataCount()/50.0/0.4364)*0.15);
可以看到,x坐标是nowtime变量,如果初始化不显示时间,例如%m:%s只显示分钟,那么后面的hour()就不能要,只要minute*60+second就可以了。
3、如果我们用100ms的刷新周期,那就把单位换算成100ms吗?实际上不用,刷新只是慢一点,填数据是没有影响的,初始化:
// 设置x轴为时间 QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime); timeTicker->setTimeFormat("%h:%m:%s.%z");
显示之:
int nowtime = QTime::currentTime().msecsSinceStartOfDay(); // 当前时间总的毫秒数 // 范围设为秒,不然晃得太快看不清,*0.001就是毫秒转成秒,然后从10秒以前的开始到现在为坐标范围 ui->widCapGraphics->xAxis->setRange((nowtime-10000)*0.001,nowtime*0.001); // 添加数据的时候也是以秒为单位,所以要 *0.001 mGraph1->addData(nowtime*0.001, qSin(mGraph1->dataCount()/50.0)+qSin(mGraph1->dataCount()/50.0/0.3843)*0.25); mGraph2->addData(nowtime*0.001, qCos(mGraph2->dataCount()/50.0)+qSin(mGraph2->dataCount()/50.0/0.4364)*0.15);
自行更改轴的范围和刷新周期,就可以爽爽的显示了