精华内容
下载资源
问答
  • Qt qextserial进行串口数据采集,qcustomplot进行绘图,曲线实时显示横纵坐标辅助线 目的、要求: A.读取RS422接口接收到的全部数据; 1.通过接口读取板卡采集的数据,采用多线程,读取数据和解析数据在主线程,...

    Qt qextserial进行串口数据采集,qcustomplot进行绘图,曲线实时显示横纵坐标辅助线

    目的、要求:

    A.读取RS422接口接收到的全部数据;

    1.通过接口读取板卡采集的数据,采用多线程,读取数据和解析数据在主线程,绘制曲线在另一个新的线程。COM和API接口见附件1.板卡用户手册。

    2.根据接收到的数据,需要先判定是返参帧A还是返参帧B,每一帧具有27个字节,每帧依据“帧头”和“校验和”来判定。

    需要注意:

    a)数据流起始位置并不一定是“帧头”。

    b)数据流中可能存在无效的数据包,需要注意判定逻辑,以免丢失有效数据。

    B.能够依据协议对数据进行解析并存储;

    1.要求对返参帧A和返参帧B数据分别解析,详细的解析与处理要求见附件2。附件2中需要用到的解析协议见附件3。

    2.将接收到的返参帧A和返参帧B分别存储在文档不同的sheet中,文档格式为".xlsx",允许用户在软件界面上以点击按钮的形式选择数据存储开始/结束,允许用户选择设置路径。

    3.存储内容包括附件2表中全部解析内容,每一项解析内容对应存储在文档中一列,存储数据为解析后未经数据处理的数据。

    C.对解析后的一些数据,以曲线的形式显示。

    1.软件需对返参帧A和返参帧B的部分解析内容进行实时曲线绘制,需要绘制曲线的参数见附件4。共15个曲线图。

    2.通过“选项卡”的形式将不同类型曲线放置在不同选项卡页面中。

    3.要求曲线能根据接收解析后的数据点进行动态实时更新,从右向左,横坐标代表点的个数,曲线对应的横坐标刻度要一同向左更新移动。

    4.要求曲线窗口有图标题,有横纵坐标标题;如果一个曲线窗口中有多条曲线,要求用不同颜色区分,对不同曲线有标注;用户可选择仅显示其中某一条或某两条曲线;

    5.曲线要求正常显示为1000个数据点,缓存区要求存180000个数据点,可在曲线窗口上左右拖拽以查看180000中的各个1000个数据点的显示区间,超出180000个数据点缓存区后,每进入一个新的数据点,则顺次清除一个原数据点。曲线横、纵坐标范围允许用户调整,可进行2、4、6、8倍的4档放大曲线局部判读。

    6.鼠标移动到曲线上的数据点上时,要求有指向横、纵坐标的辅助线。

    简介:

    考虑到这个要移植到硬件上,到时候交叉编译后的Qt环境需要串口模块的支持。所以选用了第三方的chua串口通讯模块qextserial进行串口通讯。绘图使用的第三方的qcustomplot。串口模块放到线程里,数据处理和绘图部分放到了主线程。这个地方主要麻烦的是对通讯帧的解析。首先分为A B两种mo's模式,每个字节对应的有不同的含义。有些字节的某几位对应的不同的含义。剩下的就是数据的辅助线问题了。辅助线继承了QCustomPlot,然后重写了鼠标事件和其他的一些事件。

    效果:

    代码:

    #ifndef MHCUSTOMPLOT_H
    #define MHCUSTOMPLOT_H
    
    #include "mhtracer.h"
    #include "qcustomplot.h"
    #include <QObject>
    #include <QList>
    
    class MhCustomPlot : public QCustomPlot
    {
        Q_OBJECT
    public:
        MhCustomPlot(QWidget *parent = 0);
    
    protected:
        virtual void mouseMoveEvent(QMouseEvent *event);
        virtual void enterEvent(QEvent *event);
        virtual void leaveEvent(QEvent *event);
        //virtual void mouseDoubleClickEvent(QMouseEvent *event);
    //signals:
        //void legendDoubleClickChilden(QCPLegend *legend,  QCPAbstractLegendItem *item, QMouseEvent *event);
    public:
        //设置是否显示鼠标追踪器
        //是否显示
        void showTracer(bool show);
        // 是否显示鼠标追踪器
        bool isShowTracer(){return m_isShowTracer;}
    
    private:
        bool m_isShowTracer;//是否显示追踪器(鼠标在图中移动,显示对应的值)
        MhTracer *m_xTracer;//x轴
        MhTracer *m_yTracer;//y轴
        QList<MhTracer *> m_dataTracers;//
        MhTraceLine  *m_lineTracer;//直线
    };
    
    #endif // MHCUSTOMPLOT_H
    
    #include "mhcustomplot.h"
    
    MhCustomPlot::MhCustomPlot(QWidget *parent)
        :QCustomPlot(parent)
        ,m_isShowTracer(false)
        ,m_xTracer(Q_NULLPTR)
        ,m_yTracer(Q_NULLPTR)
        ,m_dataTracers(QList<MhTracer *>())
        ,m_lineTracer(Q_NULLPTR)
    {
    
    }
    //设置是否显示鼠标追踪器
    //是否显示
    void MhCustomPlot::showTracer(bool show)
    {
        m_isShowTracer = show;
        if(m_xTracer)
            m_xTracer->setVisible(m_isShowTracer);
        ///
        if(m_yTracer)
        {
            m_yTracer->setVisible(m_isShowTracer);
        }
        foreach (MhTracer *tracer, m_dataTracers)
        {
            if(tracer)
                tracer->setVisible(m_isShowTracer);
        }
        if(m_lineTracer)
            m_lineTracer->setVisible(m_isShowTracer);
    }
    
    void MhCustomPlot::mouseMoveEvent(QMouseEvent *event)
    {
        QCustomPlot::mouseMoveEvent(event);
    
        if(m_isShowTracer)
        {
            //当前鼠标位置(像素坐标)
            int x_pos = event->pos().x();
            int y_pos = event->pos().y();
    
            //qDebug() << "x_pos:" << x_pos << "y_pos:" << y_pos;
    
            //像素坐标转成实际的x,y轴的坐标
            float x_val = this->xAxis->pixelToCoord(x_pos);
            float y_val = this->yAxis->pixelToCoord(y_pos);
    
            if(Q_NULLPTR == m_xTracer)
                m_xTracer = new MhTracer(this, MhTracer::XAxisTracer);//x轴
            m_xTracer->updatePosition(x_val, y_val);
    
            if(Q_NULLPTR == m_yTracer)
                m_yTracer = new MhTracer(this, MhTracer::YAxisTracer);//y轴
            m_yTracer->updatePosition(x_val, y_val);
    
            int nTracerCount = m_dataTracers.count();
            int nGraphCount = graphCount();
            if(nTracerCount < nGraphCount)
            {
                for(int i = nTracerCount; i < nGraphCount; ++i)
                {
                    MhTracer *tracer = new MhTracer(this, MhTracer::DataTracer);
                    m_dataTracers.append(tracer);
                }
            }
            else if(nTracerCount > nGraphCount)
            {
                for(int i = nGraphCount; i < nTracerCount; ++i)
                {
                    MhTracer *tracer = m_dataTracers[i];
                    if(tracer)
                    {
                        tracer->setVisible(false);
                    }
                }
            }
            for (int i = 0; i < nGraphCount; ++i)
            {
                MhTracer *tracer = m_dataTracers[i];
                if(!tracer)
                    tracer = new MhTracer(this, MhTracer::DataTracer);
                tracer->setVisible(true);
                tracer->setPen(this->graph(i)->pen());
                tracer->setBrush(Qt::NoBrush);
                tracer->setLabelPen(this->graph(i)->pen());
                auto iter = this->graph(i)->data()->findBegin(x_val);
                double value = iter->mainValue();
    //            double value = this->graph(i)->data()->findBegin(x_val)->value;
                tracer->updatePosition(x_val, value);
            }
    
            if(Q_NULLPTR == m_lineTracer)
                m_lineTracer = new MhTraceLine(this,MhTraceLine::Both);//直线
            m_lineTracer->updatePosition(x_val, y_val);
    
            this->replot(QCustomPlot::rpQueuedReplot);//曲线重绘
        }
    }
    
    void MhCustomPlot::enterEvent(QEvent *event)
    {
        //QCustomPlot::enterEvent(event);
        //qDebug() << "鼠标进入";
        m_isShowTracer = true;
        if(m_xTracer)
            m_xTracer->setVisible(m_isShowTracer);
        if(m_yTracer)
        {
            m_yTracer->setVisible(m_isShowTracer);
        }
        foreach (MhTracer *tracer, m_dataTracers)
        {
            if(tracer)
                tracer->setVisible(m_isShowTracer);
    
        }
        if(m_lineTracer)
            m_lineTracer->setVisible(m_isShowTracer);
        this->replot(QCustomPlot::rpQueuedReplot);
    }
    
    void MhCustomPlot::leaveEvent(QEvent *event)
    {
        //QCustomPlot::leaveEvent(event);
        //qDebug() << "鼠标离开";
        m_isShowTracer = false;
        if(m_xTracer)
            m_xTracer->setVisible(m_isShowTracer);
        if(m_yTracer)
        {
            m_yTracer->setVisible(m_isShowTracer);
        }
        foreach (MhTracer *tracer, m_dataTracers)
        {
            if(tracer)
                tracer->setVisible(m_isShowTracer);
        }
        if(m_lineTracer)
            m_lineTracer->setVisible(m_isShowTracer);
        this->replot(QCustomPlot::rpQueuedReplot);
    }
    
    //void MhCustomPlot::mouseDoubleClickEvent(QMouseEvent *event)
    //{
    //    QCustomPlot::mouseDoubleClickEvent(event);
    //}
    

     

    exe地址(百度网盘链接):

    链接:https://pan.baidu.com/s/1YeYbY32FM1Ol1FKvdLUUJA 
    提取码:tr0d 

    QQ:921673516  QQ群:511450936  邮箱:yue_xusy@163.com

    展开全文
  • QT之QCustomPlot绘图实现8通道串口虚拟示波器----QCustomPlot实时绘图 QT之QCustomPlot绘图实现8通道串口虚拟示波器----plaintextedit显示大量数据 QT之QCustomPlot绘图实现8通道串口虚拟示波器----问题记录 可以...
    展开全文
  • 基于QCustomPlot实时曲线图

    千次阅读 2020-04-02 08:52:35
    实时曲线图的qt实现...该绘图方法使用QCustomPlot,定义一个继承自QCustomPlot的类Qcurve。 曲线管理 在类中,使用一个map管理各条曲线 QMap<QString, QPointer<QCPGraph>> mGraph; 图例显示: 在...

    前言

    接上篇,上篇写到图结构的可视化,这一篇介绍实时曲线图。

    实现效果

    在这里插入图片描述

    代码实现

    该绘图方法使用QCustomPlot,定义一个继承自QCustomPlot的类Qcurve。

    曲线管理

    在类中,使用一个map管理各条曲线

    QMap<QString, QPointer<QCPGraph>> mGraph;
    

    图例显示:

    在类的构造函数中使用

    this->legend->setVisible(true);
    

    以显示图例

    定时刷新:

    使用一个定时器进行定时刷新

    timerTick = new QTimer();
    timerTick->setInterval(50);
    connect(timerTick,SIGNAL(timeout()),this,SLOT(tick()));
    timerTick->start();
    
    void QCurve::tick()
    {
        this->replot();
    }
    

    添加和删除曲线

    添加曲线

    bool addCurve(QString linename)
    {
        if(!mGraph.contains(linename))
        {
            QPointer<QCPGraph> graph = this->addGraph(this->xAxis,this->yAxis);
            graph->setName(linename);
            colorindex++;
            colorindex = colorindex%18;
            QPen pen = QPen(baseColors[colorindex]);
            pen.setWidth(m_width);
            graph->setPen(pen); 
            mGraph.insert(linename,graph);
            return true;
        }
        else
            return false;
    }
    

    删除曲线

    bool deleteCurve(QString linename)
    {
        if(mGraph.contains(linename))
        {
            auto graphit = mGraph.find(linename);
            this->removeGraph(graphit.value());
            mGraph.remove(linename);
            return true;
        }
        else
        {
            return false;
        }
    }
    

    添加数据

    bool addData(QString linename,int ms, double data)
    {
        if(mGraph.contains(linename))
        {
            auto graphit = mGraph.find(linename);
            graphit.value()->addData(ms,data);
            if(graphit.value().data()->dataCount()>m_range)
                graphit.value()->removeDataBefore(m_range);
            this->xAxis->rescale();
    
            graphit.value()->rescaleValueAxis(!firstdata, true);
    
            this->xAxis->setRange(this->xAxis->range().upper, m_range, Qt::AlignRight);
            firstdata = false;
            return true;
        }
        else   //没有则添加
        {
            if(addCurve(linename))
                return true;
            return false;
        }
    }
    

    修改QCustomPlot源码

    本文使用个v2.0.1的qcustomplot,没有了v1.x版本的removeDataBefore函数,因此修改qcustomplot源码进行添加,在QCPGraph类中增加如下公有成员函数。

    void QCPGraph::removeDataBefore(int size)
    {
        mDataContainer->removeBefore(mDataContainer->size()-size);
    }
    

    如何使用

    将Qcurve加入到界面,或者可以直接提升控件。

    curve = new QCurve();
    QGridLayout *curvegrid = new QGridLayout(ui->tab_curve2);
    curvegrid->addWidget(curve);
    

    添加和删除曲线

    curve->addCurve(linename);
    curve->deleteCurve(linename);
    

    添加数据

    curve->addData(linename,time,data);
    

    使用建议

    在使用时笔者倾向于使用map对所有曲线进行管理。

    QMap<QString,int> curveManager;
    curveManager.insert(linename, value);
    curveManager.remove(linename);
    

    其中value存放linename所需绘图数据的索引。在需要更新界面时,使用curveManager会比较方便。

    for(auto it = curveManager.begin();it!=curveManager.end();it++)
    {
        int time = alldata[it.value()].time;
        double data = alldata[it.value()].data;
        curve->addData(it.key(),time,data);
    }
    
    展开全文
  • QCustomPlot是为了绘图和数据可视化而产生的一个Qt控件。它没有其他的依赖关系,并且有丰富的帮助文档。这个控件关注于好看,高质量2D绘图,图形和图表,以及可视化应用程序实时的效率。此控件使用起来非常简单,不像...
  • 这次在原有基础上进行了优化,并且增加了协议帧捕获功能,使用QCustomPlot进行波形绘图的功能,可应用于实时动态绘图。(直男审美,实在不懂UI设计,望吐槽时嘴下留情) GitHub源码仓库:源码下载 波形界面展示...

     

    之前写了一款串口调试上位机,有很大的功能欠缺,整体感觉十分不爽。这次在原有基础上进行了优化,并且增加了协议帧捕获功能,使用QCustomPlot进行波形绘图的功能,可应用于实时动态绘图。(直男审美,实在不懂UI设计,望吐槽时嘴下留情)

    GitHub源码仓库:源码下载

     

    波形界面展示:

    左侧是绘图区,右侧为控制区。最大可以显示20条曲线,可对波形、散点、背景、坐标进行设置。

     

     

    绘图散点功能展示:

    右侧 曲线/散点设置 的功能,依次为:隐藏/显示、颜色选择、加粗显示、值显示、线连接方式、散点形状。

    每条曲线的颜色、线连接方式、散点形状均可调。线连接方式包括:点、线左对齐、右对齐、居中对齐、平行y轴的高线。

     

     

    自发自收,波形绘图测试:

     

     

    百万字节绘图测试:

    百万字节接收绘图测试:CPU占用率保持在20%左右(7代i5四核四线程),内存占用随历史接收的增加而增加。

     

     

    协议帧格式介绍:

    协议帧兼容匿名四轴调试上位机,在mainwindow.h中修改宏定义可自定义帧头、功能字。

    每帧数据包含 N条绘图波形的一个点,类型为int16,每输入一帧便会在波形界面中绘制出N个点,并且X轴显示坐标加1。连续不断发送便可实时动态绘图。

     

    固定帧头 3A 3B,用于帧起始位置的识别。(默认3A 3B,可在代码中修改)

    功能字 01,意义为波形绘图,暂时只定义了这一个有效功能字。

    有效字的总字节长度范围为 2~40,只能为偶数,对应着 1~20条曲线。

    单个有效字的字节长度为 2Byte,int16类型,由于计算机存储数据时使用补码,手动计算需要转换为补码。

    校验和为此帧前面所有数据的累加,取末位的1字节,做校验和。校验比对正确则进行绘图,不正确则误码数量加1。

     

    例1,包含2条波形:

    3A 3B 01 04 FF 38 13 14 D8(16进制显示)
    3A 3B 01 04 FF 38 13 14 D8
    固定帧头 功能字 有效字的总长度,4 第1有效字,-200的补码 第2有效字,4884的补码 校验和

    例2,包含20条波形:

    3A 3B 01 28 00 C8 01 90 02 58 03 20 03 E8 04 B0 05 78 06 40 07 08 07 D0 FF 38 FE 70 FD A8 FC E0 FC 18 FB 50 FA 88 F9 C0 F8 F8 F8 30 94(16进制显示)
    3A 3B 01 28 00 C8 01 90 02 58 03 20 03 E8 04 B0 05 78 06 40 07 08 07 D0 FF 38 FE 70 FD A8 FC E0 FC 18 FB 50 FA 88 F9 C0 F8 F8 F8 30 94
    固定帧头 功能字 有效字的总长度,40 200的补码 400 600 800 1000 1200 1400 1600 1800 2000 -200 -400 -600 -800 -1000 -1200 -1400 -1600 -1800 -2000 校验和

     

    补码计算器:补码在线计算

     

     

    详细功能介绍:

    自动扫描可用串口端口,同时显示端口硬件信息(无须再查看设备管理器,方便选择),波特率可手动输入。

    发送/接收字节、速率统计、帧统计、误码统计。

    接收区每2000字节强制换行,避免一行的内容太多,导致CPU占用过高从而卡顿,已测试过累计千万字节不卡顿。(仅仅是在接收显示里加换行,实际的真实数据不受影响)

    支持中文收发,默认GB2312编码,如需Unicode/UTF8/UTF16需要更改代码。(单片机中文编码大多使用GB2312,占用空间小)

    收/发区,无缝16进制转换,GB2312中文不乱码。输入框可作为转换框,无须在计算后重复输入。

     

    增加帧捕获功能,用户可自定义修改两字节的帧头,帧协议兼容匿名四轴调试上位机。

    增加捕获帧调试界面,方便调试。

     

    波形绘图最多可显示20条曲线。曲线连接方式,颜色、散点形状可任意设置。可隐藏,可加粗显示。

    曲线连接方式支持:点、线连接、左台阶、右台阶、居中台阶、纵值绘图。

    波形散点形状支持:x形、+形、空心圆、实心圆、矩形、菱形、星形、正三角、倒三角、x框、+框、x圆、+圆、和平。

    动态绘图支持: X轴自动跟随、Y轴范围自适应。

    图页显示范围可在右下角手动输入调整。

    支持滚轮Y轴缩放、左键拖拽、单击曲线加粗显示,不支持拖拽缩放。

     

     

    未完善功能:

    (对体验影响不大,更新要等到猴年马月了)

    曲线值显示。跟随鼠标显示,波形名称显示。

    QSetting记录用户设置。

    波形名称可点击修改。

    保存数据为txt/excel。

     

    GitHub源码仓库:源码下载

     

    展开全文
  • 这个控件关注于好看,高质量2D绘图,图形和图表,以及可视化应用程序实时的效率。此控件使用起来非常简单,不像QWT那样。也可以自己使用两个源文件编译生成库文件,非常方便。 官网地址:http://www.qcustomplot.com/。...
  • QCustomPlot简介

    2015-09-28 15:55:47
    QCustomPlot是一个绘图和数据可视化的Qt widget.它没有太多依赖并且有规范的文档。这个绘图库关注于使得plots,graphs和charts更漂亮,质量更高,并且还为实时可视化应用提供高效率。 QCustomPlot可以导出各种各样的...
  • Qt--QCustomPlot

    千次阅读 2018-04-20 08:19:26
    1、QT绘图有QWT和QCustomPlot,QWT比较麻烦一些,相比来说QCustomPlot简单易用。    二、QCustomPlot介绍 1、QCustomPlot是一个用于绘图和数据可视化的Qt C++构件。 它没有进一步的依赖关系,并有很好的文档...
  • 本文介绍使用QcustomPlot实时2D航迹图,实现功能有添加航迹,删除航迹,设置线宽和颜色等。 实现效果 代码实现: 该绘图方法使用qcustomplot,定义一个继承自QcustomPlot的类QTrack2D 曲线管理 在类中,使用一个map...
  • qcustomplot_realtime.zip

    2019-08-29 08:41:23
    QCustomPlot 绘制动态曲线,包含一个官方代码和一个实时绘图性能测试例子,请看博客https://blog.csdn.net/yxy244/article/details/100099876
  • QCustomPlot绘图和数据可视化的一种Qt C++控件,使用方便简洁。 QCustomPlot用于在应用程序中显示实时数据以及生成高质量图表提供了方便。其下载地址如下: https://www.qcustomplot.com/index.php/download ...
  • 学习QT之QCustomPlot介绍

    2020-03-28 11:09:23
    1、QCustomPlot是一个用于绘图和数据可视化的Qt C++构件。 它没有进一步的依赖关系,并有很好的文档记录。 该绘图库专注于制作美观,出版品质的2D图表,图表和图表,以及为实时可视化应用程序提供高性能。 ...
  • qtSerialDataPlotFFT 简单的qt应用程序,用于计算来自串行端口的数据的实时(Real)...每当一个样本接收到并立即更新绘图时,它还计算实时SDFT。 它还支持将接收到的数据记录到File中。 如果您有任何问题,请告诉我。
  • 1、数据实时显示2、静态绘图样式3、其他例程三、QCustomPlot 如何用?获取方式使用方法下一期 QCustomPlot_快速入门-EightStars(二) 一、QCustomPlot 是什么? QCustomPlot是一种为绘图和数据可视化的一种QtC++...
  • QCustomPlot是一个用于绘图和数据可视化的Qt c++小部件。它没有进一步的依赖关系,并且有很好的文档记录。这个绘图库专注于制作好看的、具有出版质量的2D图、图形和图表,并为实时可视化应用程序提供高性能。看一看...
  • Qt C++ 小部件 QCustomPlot 的使用

    千次阅读 2016-12-16 08:19:03
    此绘图库专注于制作好看且高质量的2D绘图,图形和图表,以及为实时可视化应用程序提供高性能的绘图。 2. 下载 下载地址:http://www.qcustomplot.com/index.php/download 3. 集成到QtCreator / QtAssistant 解压...
  • VS2019+Qt5.13下QCustomPlot的配置

    千次阅读 2020-04-07 20:34:06
    该绘图库专注于制作美观、显示质量高的2D绘图和图表,并在实时可视化应用程序中有较高性能。 本人用它主要是因为qwt配置起来实在太麻烦了。。。 1. 从QCustomPlot官网下载源码及说明文档:...
  • 该代码基于第三方QCustomplot Qt绘图库,实现鼠标与绘制图形的友好交互功能:鼠标放置在绘图区域的阈值线附近时,阈值线高亮;拖动鼠标时,阈值线可跟随鼠标实时移动,并ToolTips方式实时显示当前的值;支持两条垂直...
  •     QCustomPlot是用于绘图和数据可视化的Qt C ++小部件。它没有进一步的依赖关系,并且有据可查。该绘图库专注于制作美观,出版质量的2D绘图,图形和图表,以及为实时可视化应用程序提供高性能。看一下“设置”...
  • Qt绘图知识(一)

    2019-05-15 22:10:00
    该绘图库专注于制作美观、出版物质量高的2D绘图、图形和图表,并为实时可视化应用程序提供高性能。 Setting up QCustomPlot Getting QCustomPlot to work with your application is very easy: •从官网下...
  • QCustomPlot动态实时绘图,绘制表中添加鼠标追踪提示和坐标轴数据提示信息
  • Qt Charts 动态实时绘制各种曲线图

    万次阅读 多人点赞 2019-09-09 14:17:25
    在Qt Charts发布之前,Qt比较著名两个画图插件是 qwt和Qcustom, 其中Qcustom较轻量,只需要在project 中包含qcustomplot.h 和qcustomplot.cpp 几乎就可以使用。 相比Qcustom,qwt功能更为强大,但是它的安装十分...
  • Qt/C++ 波形图 心电波 实时显示

    万次阅读 2016-06-07 19:39:46
    虽然网上有QCustomPlot类 可以直接使用 ~但还是写一个来玩玩吧 效果如下:   这个波形是从左至右滚动的,原理就是不断地更新,绘图,就形成了动态滚动了的效果 源码下载:...
  • 利用QT5.8显示下位机(stm32)即通过串口传输上来的数据,为了更好地显示曲线,没有使用QT自带的类库,而是引入了以下几个文件作为绘图的类库。 并且将以上几个文件导入到工程文件中,(使用的话直接导入就行,不要...
  • QCustomPlot 安装和使用

    2021-05-18 18:04:04
    这个绘图库的重点是绘制好看,高质量的二维绘图,图形和图表,以及提供实时可视化应用程序的高性能。用于绘制和数据可视化 - 制作漂亮的2D图 - 曲线图、趋势图、坐标图、柱状图等。 一、下载 二、安装帮助文档 ...
  • 主程序里数据传输到新的类里(这里是线程,其他类似)后,需要在里面绘图,这样就需要调用ui界面的控件。网上搜寻到很多方法,都一一试验,但是都没有办法完美的实现,不是这里错,就是那里错。所以有点怀疑是不是...
  • 基于qwt3D 的3D航迹图的实现

    千次阅读 2020-04-02 23:52:50
    在qt下实现3D绘图通常实现方式有OpenGL,VTK,qwt3d,QtDataVisualization等,Qcharts,QCustomPlot只支持2D绘图。 这里给出笔者基于QcustomPlot封装的实时曲线图和二维航迹图。 对于3D实时航迹的绘制,在QtData...
  • 为更好地检测采煤机液压盘式制动...上位机以QT5.4为平台,通过Qt Serial Port串口模块、QcustomPlot绘图模块、Qt Sql数据库模块等进行界面设计。该系统实现了试验台数据的高精度采集、实时曲线显示、数据库开发设计等。
  • 降低Qt程序CPU占用率

    千次阅读 2018-04-08 17:02:07
    发现自己的程序CPU占用率奇高:达到百分之五十多! 按照网上的说法,原因有...我的程序是通过网络每秒一次读取下位机数据,并调用Qcustomplot绘图,并每分钟将实时数据存取到数据库。 一步步调试,寻找原因,首...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

qcustomplot实时绘图