首页 > 其他分享 >Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板

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

时间:2022-12-02 15:03:09浏览次数:74  
标签:qwt Qt demo 源码 append Qwt 模板 pQwtPlot

前言

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

<br>

注意

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

<br>

多年前文章

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

<br>

Demo演示

  在这里插入图片描述

<br>

Qwt简介

简介

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

支持Qt版本

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

<br>

演示图

曲线图

  在这里插入图片描述

光谱图,等高线图

  在这里插入图片描述

条形图、柱状图

  在这里插入图片描述

其他绘图

  在这里插入图片描述

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

  在这里插入图片描述

<br>

下载

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

  • 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类一样可用。

<br>

模块化部署到工程

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

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

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

<br>

模块化

  在这里插入图片描述

<br>

基础环境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);
        }
    }
}

<br>

基础模板v1.0.0

   在这里插入图片描述

<br>

入坑

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

问题

  在这里插入图片描述

原因

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

解决

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

标签:qwt,Qt,demo,源码,append,Qwt,模板,pQwtPlot
From: https://blog.51cto.com/hongpangzi/5907034

相关文章

  • Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板
    前言  QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并逐步更新......
  • 实验6 模板类和文件I/O
    task3_1.cpp#include<iostream>#include<fstream>#include<array>#defineN5intmain(){usingnamespacestd;array<int,N>x{97,98,99,100,......
  • Python怎样写个通用爬虫模板?
    其实经常写爬虫的程序员应该都知道,做一个爬虫工作无非就是三个步骤:下载数据、解析数据、保存数据。基本所有爬虫万变不离其宗,都是这样的套路。下面就是Python写出来一个完......
  • 实验6 模板类和文件I/O
    实验任务三:task3_1.cpp:#include<iostream>#include<fstream>#include<array>#defineN5intmain(){usingnamespacestd;array<int,N>x{97,98......
  • Springboot+freemaker+eureka+fegin实现多文件上传,完整demo
    可能一般用fegin实现文件上传的不多,但这也算是一个文件上传方式吧,如果用到了,可以考虑借鉴一下,直接上代码好了eurekapom.xml<?xmlversion="1.0"encoding="UTF-8"?><......
  • PyCharm设置注释模板及光标位置
    一、Python文件注释模板步骤如下:1、 2、 当前模板:#=================================#File:${NAME}.py#Description:#[[$END$]]##Author......
  • 模板——函数模板
    概念:建立通用的模具,提高复用性。。特点:●模板不能被直接使用,他只是一个框架●模板是通用,但不是万能C++中的一种编程思想称为泛型编程,主要利用的技术就是模板C++提供......
  • 实验6 模板类和文件I/O
    实验任务3#include<iostream>#include<fstream>#include<array>#defineN5intmain(){usingnamespacestd;array<int,N>x{97,98,99,100,101......
  • 浅谈C++模板机制
    一、    什么是模板?1.模板(Template)可以看做成对于某一类问题一种通用的解决方案,而实现的具体细节则需要根据实际问题对模板做出调整和优化。2.如我们在使用Word进......
  • SpringBoot过滤器工具类解决跨域问题模板
    放入目录config即可@ConfigurationpublicclassCorsConfigimplementsFilter{@OverridepublicvoiddoFilter(ServletRequestreq,ServletResponseres,F......