首页 > 其他分享 >Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按照输入点顺序连曲线

Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按照输入点顺序连曲线

时间:2024-02-17 18:22:06浏览次数:17  
标签:实用技巧 轨迹 QCPGraph Qt 位置图 keys 曲线 QCustomPlot

需求

  使用QCustomPlot绘制多个目标的北斗运行轨迹图,包括累计绝对位置图和记录时刻的相对位置图。
  当前绘制存在问题:在这里插入图片描述  在这里插入图片描述
  交付客户前,公司内部自测流程发现的问题。
  实际预期效果为:
  在这里插入图片描述

 

原因

  QCustomPlot加入数据是按照x轴排列,也可以按照y轴排列,使用图层就只能这样。

 

尝试一:使用QCPGraph排序

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  确认不支持曲线图:
  在这里插入图片描述

尝试二:查看官方曲线Demo源码

  查看官方配套的曲线Demo(注意:全部搜索了”spline“都没有,这是想看下支持三次插值绘制曲线的额外功能,但是搜索可能某些版本有):
  在这里插入图片描述
  在这里插入图片描述
  QCustomPlot要按照输入点顺序连线,那么就需要直接使用曲线QCPCurve(曲线类)进行操作,而不是使用QCPGraph类(addGraph产出)
  测试数据如下:

void LongitudeLatiudeTrackDiagramWidget::test()
{
    QVector<double> keys;
    QVector<double> values;
    keys << 1.0 << 2.0 << 3.0 << 2.0 << 1.0;
    values << 1.0 << 2.0 << 3.0 << 4.0 << 5.0;

    // 步骤一:创建曲线
    QCPCurve *pCPCurve = new QCPCurve(_pLongitudeLatiudeTrackDiagramCustomPlot->xAxis, _pLongitudeLatiudeTrackDiagramCustomPlot->yAxis);
    // 步骤二:曲线数据
    pCPCurve->addData(keys, values);

    _pLongitudeLatiudeTrackDiagramCustomPlot->replot();
}

  测试效果如下:
  在这里插入图片描述

 

解决方法

  1.重新定制控件,每一个目标由QCPGraph改为QCPCurve
  2.同步修改操作修改清空、添加、属性设置、缓存等操作函数

 

最终效果

  绝对位置累计运动轨迹图:
  在这里插入图片描述
  当帧数据相对位置图:
  在这里插入图片描述

标签:实用技巧,轨迹,QCPGraph,Qt,位置图,keys,曲线,QCustomPlot
From: https://www.cnblogs.com/qq21497936/p/18018201

相关文章

  • QT_linux
    加载本地图片/*QPixmap类型对象*/QPixmapimage;/*加载*/image.load(":/image/cd.png");//不缩放ui->label->setScaledContents(false);//图片在标签中居中显示(水平和垂直方向均居中)ui->label->setAlignment(Qt::AlignCenter);pixbad2(":/1/bad.png");......
  • QT打包
    Qt打包程序提示“应用程序无法正常启动(0xc000007b)”/未找到Qt5Core.dll的正确解决方案先打到配置环境变量的页面 ......
  • Qt环境Windows应用程序动态变更系统默认打印机
    有些工作环境安装有多个打印机,针对不同需求进行各种输出。如果是用QPrinter进行打印控制,可以通过setPrinterName确定使用哪一个打印机,但如果程序使用了第三方功能进行打印输出,比如通过QAxObject调用系统的文字处理直接输出,就可能会遇到无法明确指定哪一个打印机的问题。这时就需要......
  • Qt FluentUI 框架
    QtFluentUI框架项目地址:zhuzichu520/FluentUI(github.com)安装编译直接用QtCreator打开工程,编译运行example即可。根据CMakeLists.txt可以看出,编译好了后会自动在<Qt_SDK_DIR>/<Qt_Version>/<Your_compiler>/qml下面生成FluentUI文件夹,其中存放着FluentUI......
  • qt 代码添加QScrollArea滚动区域控件,设置滚动区域窗口widget后,滚动区域和滚动条之间有
    QScrollArea#MyqtWidgetStyle_m_scrollArea{background-color:rgb(189,97,99);max-width:190px;/*最大宽度*/min-width:190px;/*最大宽度*/}QWidget#MyqtWidgetStyle_m_scorllWidget{max-width:160px;/*最大宽度*/min-width:160px;......
  • Pycharm安装与配置Pyqt5
    1、创建一个项目、虚拟环境打开pycharm,File->Newproject2、安装pyqt5及工具库在PyCharm左下角的Terminal中输入:pipinstallPyQt5-ihttps://pypi.douban.com/simplepipinstallPyQt5-tools-ihttps://pypi.douban.com/simple 3、将QT工具添加到环境变量将其安装路......
  • qt自定义标题栏,纯代码实现,拿来即用,初始化列表时传入父窗口的this指针
    //头文件#ifndefTITLEBAR_H#defineTITLEBAR_H#include<QWidget>#include<QPoint>//坐标点#include<QMouseEvent>//鼠标事件classTitleBar:publicQWidget{Q_OBJECTpublic:explicitTitleBar(QWidget*parent=nullptr);//移动窗口......
  • Qt6.0开发 第二章 GUI程序设计基础
    第二章GUI程序设计基础窗口相关文件按照第一章所给提示创建一个新project,我们得到了下面的代码:widget.h:#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>QT_BEGIN_NAMESPACEnamespaceUi{classWidget;}QT_END_NAMESPACEclassWidget:publicQWidget{......
  • 【实用技巧】【Mybatis】自定义的动态 SQL
    1 前言平时我们可能会拼接SQL,尤其是做一些报表的开发或者连表查询的时候,当条件发生变更或者关联关系需要改变的时候,就需要更改代码里的SQL,所以我这里弄了一个简易版的基于Mybatis的动态SQL调用。2 实现主要是Mybatis的动态SQL://controller层@Override@PostMapp......
  • osg qt场景中节点去除透明
     osgqt场景中节点的透明属性消除 {osg::ref_ptr<osg::StateSet>stateState=north_wall_geode->getOrCreateStateSet();stateState->setMode(GL_BLEND,osg::StateAttribute::ON);stateState->setMode(GL_DEPTH_TEST,osg::StateAttribute::ON);......