qcustomplot 做的cartools
1.完成了数据解析,没有完成自动化解析,还是用的以前的办法
2.显示目前想的办法是用button,点击相应的按钮生成,这个已经做成PlotFactoy了,后面是怎么用json自动生成。
3.可以显示多个数据,但是不能实现窗体的放大缩小,以及layout的右键操作。研究一下
4.同一界面上可以绘制多条曲线,并且可以通过鼠标右键选择删除,使用导航状态位 和星数去做
阶段总结:
使用了qcustomplot的官方历程,
那我遇到了什么事情,又是怎么解决的。
第一个是代码简化的问题,
1.对读入的数据进行memcpy,copy到结构体,结构体#pram packe(1)
,并在定义的时候extern vector(数据类型) a (大小)
,在使用的cpp 文件中extern vector(数据类型) a
;声明一下就好了。
在 parse函数中用指针的方式访问结构体中的特有变量,并用传递地址的方式(或者引用的方式)给相应的变量赋值。
这里指针的方式,用char *p指向了结构体首地址,然后
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 中offsetof(LogData,insState)+offsetof(INS_STATE,NavLatitude)
计算变量在地址中的位置,并用sizeof将长度传过去。这样memcpy就可以用来提取变量值了。
提取之后,直接plot。
怎么做到的简化呢,就是将上述的函数放在类中,子类继承父类,就可以了。在之窗体中,直接md->show();
md->PlotFactoy("insState",count,offsetof(LogData,insState)+offsetof(INS_STATE,NavLatitude),sizeof(uint32_t));这样写起来行数少。
PlotFactoy中是这么些代码:代码可以封装成私有函数。
```cpp
QVector<double> x, y0, y1(count); //
Parser(count,x,y0,index,len);//使用指针的方式,在所有帧中,获取某种数据。
Myplot(title,x,y0);
就是这么个套路吧。
2.第二个问题,怎么实现在同一界面上可以绘制多条曲线,并且可以通过鼠标右键选择删除。
这个是套用的模板,官方的函数拿来用了一下,但是不能显示坐标轴,**我使用提升的方式,将widget提升为Xxwcustomplot了**,这样就可以用ui->控件名称,在一个控件上画多个曲线了。控件大小随窗体一起变化。在控件外面右键->layout,然后好像是栅格布局。
也可以选中曲线删除曲线,也有十字游标了,不过在十字游标的显示的时候,会显示插值,我这里做了一个操作,就是在由x轴获得y轴值的时候,对x进行round(x),四舍五入。
```cpp
auto iter = this->graph(i)->data()->findBegin(round(x_val));
double value = iter->mainValue();
在显示的数值那里,让显示的框体向上便宜了20.(20,20).
第三个:矩形放缩的问题,主要参考了https://blog.csdn.net/weiaipan1314/article/details/82017129,不过他没有设置开启qcustomPlot是有鼠标选择框功能,这里参考https://blog.csdn.net/yxy244/article/details/100547688。
总体来讲,就是设置开启鼠标选择框,重写鼠标回调函数,鼠标回调函数里面实现矩形框的绘制,获取矩形的大小,并获取对应的轴的范围,设置轴的范围。
我在右键,
// setup policy and connect slot for context menu popup:
ui->customPlot->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->customPlot, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuRequest(QPoint)));
在contextMenuRequest函数中加入了恢复函数,恢复原来的大小。
但是原来的几个函数不能用了,这个要再考虑一下,其实就是怎么实现,再一个子窗体中绘制多个图片,目前在一个图片绘制多个曲线已经解决了。后面可以把所有的需要打印的信息都加进去。
然后再把tree,拖拽加进去。这两个需要两周吧。
就可以说大功告成了。C++要好好学习。
上一篇: 今天做的题
推荐阅读
-
Python做有道翻译的的时候报http.client.RemoteDisconnected: Remote end closed connection without response
-
教你用PS做立体物体的倒影
-
新手做微信公众号不容忽视的八大问题
-
最新版利用CDO.Message做的vbs下载者
-
我做一个文章搜索的功能,默认搜索的结果是按照发布时间排序的,我想按照搜索的内容相关性排序,怎么做呢?
-
像饿了么一样利用地图定位计算坐标附近餐厅的这个方式怎么做的呢?
-
站长做CPS赚钱的方式探讨
-
有swoole这么优秀的扩展,还有必要为了做长连接去学golang吗?
-
如何样做按钮将表单里的内容保存为Excel文件
-
有swoole这么优秀的扩展,还有必要为了做长连接去学golang吗?