• Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板


    若该文为原创文章,转载请注明原文出处
    本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128146985

    红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

    Qt开发专栏:三方库开发技术

    上一篇:没有了
    下一篇:《Qwt开发笔记(二):Qwt基础框架介绍、折线图介绍、折线图Demo以及代码详解


    前言

      QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并逐步更新其各种Demo示例。


    注意

      本文章介绍的版本为Qwt6.2.0,该版本为2021年7月左右发布的。


    多年前文章

      (本篇不再整理了)
      《Qt开发笔记之Qwt(一):Qwt介绍、编译与Demo
      《Qt开发笔记之Qwt(二):Qwt仪表盘的基本使用


    Demo演示

      在这里插入图片描述


    Qwt简介

    简介

      Qwt库包含GUI组件和实用程序类,它们主要用于具有技术背景的程序。除了2D绘图框架外,它还提供了刻度、滑块、刻度盘、圆规、温度计、轮子和旋钮,以控制或显示值、数组或双精度范围。

    支持Qt版本

      Qwt 6.2可能适用于您找到Qt的所有环境。它与Qt 4.8和所有Qt5版本兼容。


    演示图

    曲线图

      在这里插入图片描述

    光谱图,等高线图

      在这里插入图片描述

    条形图、柱状图

      在这里插入图片描述

    其他绘图

      在这里插入图片描述

    表盘、圆规、旋钮、滑块等

      在这里插入图片描述


    下载

      Qt平台所有>=Qt 4.8的版本都将在6.x分支中得到主动支持。
      sourceforge下载地址:https://sourceforge.net/projects/qwt/files
      在这里插入图片描述
      csdn粉丝0积分下载地址:https://download.csdn.net/download/qq21497936/87231942
      压缩包包含了:

    • qwt-6.2.0.zip
      带有Qwt源码的Zip文件和Windows的html文档
    • qwt-6.2.0标准bz2
      压缩的tar文件,带有Qwt源代码和UNIX系统(Linux、Mac…)的html文档
    • qwt-6.2.0.pdf
      Qwt文档为PDF文档。
    • qwt-6.2.0.qch
        Qwt文档作为Qt压缩帮助文档,可以加载到Qt助手或创建者中。在Qt Creator中,上下文相关的帮助将像Qt类一样可用。

    模块化部署到工程

      这里我们跟常规方式不一样,常规方式是先编译然后加入到项目中,我们是直接源码带入到源码中编译,第一次编译时间会较长,但是后续不暴露qwt的动态库,更重要的时候,当我们灵活切换平台的时候,不需在编译库和引入库上额外花费时间,以达到模块化添加的终极目的—包含模块.pri文件即可。
      查看qwt.pro文件:
      在这里插入图片描述
      所以,包含源码src工程即可,然后查看src.下:
      在这里插入图片描述
      所以包含src.pri即可。
      最终qwt6.2.20.pri模块内容如下:
      在这里插入图片描述
      这时候引入不进去:
      在这里插入图片描述
      需要多做两步骤,如下图:
      在这里插入图片描述

      把所文件前面加上$$PWD(修改之前,请copy一份备份),还得包含pro编译时的三个配置文件,如下图:
      在这里插入图片描述

      最终带qwt6.2.0源码模块如下:
      在这里插入图片描述
      然后qmake,编译(主要检测一下是否移植到工程当作模块化源码成功):
      在这里插入图片描述
      使用-j8不到3分钟就编完了,后续开发中因为此模块作为源码模块包含,在非clean模式下,只需要编译一次,但是避免了不同环境移植工程出现的各种环境问题,让团队成员之间交互,已经模块包含组装最简单化,从而提升沟通效率和开发效率。


    模块化

      在这里插入图片描述


    基础环境Demo

      这里我们做一个只是调用图的简单使用,用来确认该模块可以被调用,能正常工作,搭建基础模板demo。

    演示效果

      在这里插入图片描述
      在这里插入图片描述

    初始化源码

    void TestWidget::initQwt()
    {
        _pQwtPlot = new QwtPlot(this);
    
        // 设置背景色
        _pQwtPlot->setCanvasBackground(QBrush(QColor(255, 255, 255)));
    
        // 设置x1坐标轴
        {
            _pQwtPlot->setAxisTitle(QwtPlot::xBottom, "时间(s)");
        }
        // 设置y1坐标轴
        {
            _pQwtPlot->setAxisTitle(QwtPlot::yLeft, "采集数值");
        }
    
        // 设置绘图区域网格
        {
            QwtPlotGrid *pGrid = new QwtPlotGrid();
            pGrid->setMajorPen(Qt::gray, 1, Qt::SolidLine);
            pGrid->attach(_pQwtPlot);
        }
        // 设置图例
        {
            QwtLegend *pLegend = new QwtLegend();
            pLegend->setDefaultItemMode(QwtLegendData::Checkable);
            _pQwtPlot->insertLegend(pLegend, QwtPlot::TopLegend);
        }
        // 设置曲线0
        {
            QwtPlotCurve *pCurve = new QwtPlotCurve();
            pCurve->setTitle("电压(mV)");
            pCurve->setPen(Qt::blue, 2);
            pCurve->setRenderHint(QwtPlotItem::RenderAntialiased, true);
            // 曲线0符号对象
            {
                QwtSymbol *pSymbol = new QwtSymbol(QwtSymbol::Ellipse);
                pSymbol->setPen(Qt::red);
                pSymbol->setSize(4);
            }
            // 曲线0数据
            {
                QVector<double> vectorX;
                QVector<double> vectorY;
                vectorX.append(0); vectorY.append(0);
                vectorX.append(1); vectorY.append(2);
                vectorX.append(2); vectorY.append(3);
                vectorX.append(4); vectorY.append(4);
                pCurve->setSamples(vectorX, vectorY);
                // 将曲线添加到绘图
                pCurve->attach(_pQwtPlot);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    基础模板v1.0.0

       在这里插入图片描述


    入坑

    入坑一:融合之后,定义槽函数slots关键字错误

    问题

      在这里插入图片描述

    原因

      在这里插入图片描述
      由于使用了QT_NO_KEYWORDS宏定义,因此emit、signals、slots都不用使用了,如果想使用信号槽机制的话,必须用宏来代替,分别是Q_EMIT、Q_SIGNALS、Q_SLOTS。
       在这里插入图片描述

    解决

      直接去掉,不然我们之前的模块将需要大面积更改。
      在这里插入图片描述
      修改后,没发现出现问题,也就这样解决了。


    上一篇:没有了
    下一篇:《Qwt开发笔记(二):Qwt基础框架介绍、折线图介绍、折线图Demo以及代码详解


    若该文为原创文章,转载请注明原文出处
    本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128146985

  • 相关阅读:
    【编程题】【Scratch二级】2021.06 绘制五彩缤纷的多瓣花
    googleTest V1.12.1的基础用法
    JAVAWEB学习笔记-前端基础
    GBase 8c 备份控制函数(四)
    彻底理解并解决服务器出现大量TIME_WAIT - 第二篇
    常用DOS命令
    Maven项目管理(一)
    判断二叉树是否为二叉搜索树
    大模型的实践应用1-利用ChatGLM2大模型研发智能自助用药问答系统,远程监控患者的用药情况
    【IDEA】用idea导入eclipse的项目后,提示:The file was loaded in a wrong encoding ‘utf-8‘
  • 原文地址:https://blog.csdn.net/qq21497936/article/details/128146985