前言

  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);
}
}
}
 

基础模板v1.0.0

   

 

入坑

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

问题

  

原因

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

解决

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

Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板的更多相关文章

  1. TERSUS无代码开发(笔记01)-按装下载和基础语法

    1.中国官网 https://tersus.cn/ 2.下载:https://tersus.cn/download/ 3.开发文档:https://tersus.cn/docs/ 4.基本元件说明 图 ...

  2. 吴裕雄--天生自然Django框架开发笔记:Django简介

    Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python写成. ...

  3. Apcahe Shiro学习笔记(一):简介及运行官方Demo

    一.Apache Shrio: apache shiro 是一个功能强大和易于使用的Java安全框架,为开发人员提供一个直观而全面的的解决方案的认证,授权,加密,会话管理. 支持认证跨一个或多个数据源 ...

  4. Gif开发笔记(一):gif介绍、编译和工程模板

      前言   实现gif图片的解码和生成.   Gif 简介   GIF格式的名称是Graphics Interchange Format的缩写,是在1987年由Compu Serve公司为了填补跨平 ...

  5. Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB

    MongoDB 简介 1. 易于使用:没有固定的模式,根据需要添加和删除字段更加容易 2. 易于扩展:MongoDB的设计采用横向扩展.面向文档的数据模型使它能很容易的再多台服务器之间进行分割.自动处 ...

  6. PHP移动互联网开发笔记(8)——MySQL数据库基础回顾[2]

    一.数据表 为了确保数据的完整性和一致性,在创建表时指定字段名称,字段类型和字段属性外,还需要使用约束(constraint),索引(index),主键(primary key)和外键(foregin ...

  7. PHP移动互联网开发笔记(6)——MySQL数据库基础回想

    近期看了一些架构方面的资料.可是发现基础知识都不怎么坚固,接下来的一段时间.我会定期总结基础知识. 一.数据类型   1.整型   数据类型 存储空间 说明 取值范围 TINYINT 1字节 很小的整 ...

  8. PHP移动互联网开发笔记(7)——MySQL数据库基础回顾[1]

    一.数据类型 1.整型 数据类型 存储空间 说明 取值范围 TINYINT 1字节 非常小的整数 带符号值:-128~127无符号值:0~255 SMALLINT 2字节 较小的整数 带符号值:-32 ...

  9. TERSUS无代码开发(笔记02)-简单实例加法

    简单实例加法 1.用户端元件(显示元件)(40个) 图标 英文名称 元件名称 使用说明 服务器端 客户端 Pane 显示块 是一个显示块,是HTML的div标签   √ Row 行 行元件中的显示元件 ...

  10. Windows 8.1 store app 开发笔记

    原文:Windows 8.1 store app 开发笔记 零.简介 一切都要从博彦之星比赛说起.今年比赛的主题是使用Bing API(主要提到的有Bing Map API.Bing Translat ...

随机推荐

  1. 使用kubeoperator自带的nginx-ingress-controller设置服务的ingress规则进行访问

    情况说明 当使用kubeoperator安装k8s集群的时候,在组件设置部分选择的ingress 类型是nginx-ingress yaml文件 k8s集群安装后,可以在节点的master主机的这个目 ...

  2. EFK-2:ElasticSearch高性能高可用架构

    转载自:https://mp.weixin.qq.com/s?__biz=MzUyNzk0NTI4MQ==&mid=2247483811&idx=1&sn=a413dea65f ...

  3. gitlab添加新用户

    添加用户的时候没法给用户设置密码,可以等用户添加后,编辑用户的时候给用户设置密码 新用户首次登陆后需要重置密码 新用户登陆后是英文界面,设置成中文界面

  4. 基于MySQL的-u选项实现如何最大程度防止人为误操作MySQL数据库

    在mysql命令加上选项-U后,当发出没有WHERE或LIMIT关键字的UPDATE或DELETE时,MySQL程序就会拒绝执行.那么,我们基于MySQL提供的这项设置,就可以轻松实现如何最大程度防止 ...

  5. linux修改mysql的默认端口

    本文是基于centos7的环境进行编写,如果是其他linux系统命令可能不一样,根据 1.首先我们查看mysql的默认端口 我们登录mysql到mysql查看mysql使用的端口 show globa ...

  6. 一个终端工具竟然有AI功能?使用了1天我立马把其他终端全卸载了!太香了!

    前言 平常工作需要频繁使用终端工具,有一个好的命令行终端工具是非常重要的. 尤其是使用mac的小伙伴,估计不少人都觉得iterm2才是最好的终端工具. 其实起初我也是这么觉得的,但是最近直到我使用了这 ...

  7. Go实现优雅关机与平滑重启

    前言 优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对客户端友好的关机方式.而执行Ctrl+C关闭服务端时,会强制结束进程导致正在访问的请求出 ...

  8. 洛谷P1438 无聊的数列 (线段树+差分)

    变了个花样,在l~r区间加上一个等差数列,等差数列的显著特点就是公差d,我们容易想到用线段树维护差分数组,在l位置加上k,在l+1~r位置加上d,最后在r+1位置减去k+(l-r)*d,这样就是在差分 ...

  9. 谣言检测()《Data Fusion Oriented Graph Convolution Network Model for Rumor Detection》

    论文信息 论文标题:Data Fusion Oriented Graph Convolution Network Model for Rumor Detection论文作者:Erxue Min, Yu ...

  10. Js实现一键复制小功能

    function copyToClipboard(textToCopy) { // navigator clipboard 需要https等安全上下文 if (navigator.clipboard ...