其他分享
首页 > 其他分享> > qcustomplot 做的cartools

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++要好好学习。

标签:控件,函数,qcustomplot,cartools,窗体,右键,offsetof,鼠标
来源: https://blog.csdn.net/u010647296/article/details/110679343