qwt学习一

2023-05-16

学习这个东西方向对了,就对了一半

今天我开始学习基于qt库的一个开源的绘制2维的统计图的库--qwt。

我们画东西首先要有一个容器,不然都是徒劳,今天我们就介绍这个类--QwtPlot

它继承自QFrame和QwtPlotDict,QFrame提供一个QWidget的框架,QwtPlotDict为QwtPlot管理在其中的plot items,就是绘制的项。在QwtPlot上我们可以绘制无限多个的plot items,这些plot items可以是曲线,标记,格子以及继承自QwtPlotItem的子类。一个QwtPlot可以有四个轴,每个plot item连接到x和y轴上。在轴上的比例变换可以使用QwtScaleDiv,对于plot items比例可以使用QwtScaleEngine来计算,在每个轴上,QwtScaleEngine可以被单独设置。

在QwtPlot中有两个枚举类型。

Axis,轴,5个值,一个QwtPlot除了x和y,还有top和bottom轴,第五个是axisCnt,轴数,枚举从0开始,第五个为4,说明一共四个轴。另一个是LegendPosition,图例的位置。

它有五个值,分别指定插入一个图例仔什么位置,四个都是和x和y轴的位置有关,最后一个是特殊的,它允许不在这个Plot中,就是外部的。


这是今天写的一个小例子

/************************************************
*
*author:周翔
*e-mail:604487178@qq.com
*blog:http://blog.csdn.net/zhx6044
*
*
*************************************************/

#ifndef PLOT_H
#define PLOT_H

#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_picker.h>
#include <qwt_plot_panner.h>
#include <qwt_plot_magnifier.h>
#include <qwt_legend.h>
#include <qwt_plot_grid.h>
#include <qwt_picker_machine.h>




class Plot : public QwtPlot
{
    Q_OBJECT
public:
    explicit Plot(QWidget *parent = 0);
    ~Plot();
signals:
    
public slots:


private:
    QwtPlotCurve *sinCurve;
    QwtPlotCurve *cosCurve;
    QwtPlotPicker *picker;


    void initCanvas();
    void initAxes();
    void initCurves();
    
};

#endif // PLOT_H

/************************************************
*
*author:周翔
*e-mail:604487178@qq.com
*blog:http://blog.csdn.net/zhx6044
*
*
*************************************************/

#include "plot.h"


double _sin2(double x)
{
    return ::sin(2 * x);
}

/**
 * @brief The FunctionData class 将一个函数包装一下,就像一个函数对象一样,但是又不一样,没有基于运行符()重载
 * 而是基于多态,我们只需要继承它,实现相关的虚函数即可,它内部有自己的调用规则
 */
class FunctionData: public QwtSyntheticPointData
{
public:
    FunctionData(double(*y)(double)):
        QwtSyntheticPointData(100),
        d_y(y)
    {
    }

    virtual double y(double x) const
    {
        return d_y(x);
    }

private:
    double(*d_y)(double);
};


Plot::Plot(QWidget *parent) :
    QwtPlot(parent)
{
    initCanvas();
}
Plot::~Plot()
{

}

void Plot::initCanvas()
{
    //右键拖拽
    (new QwtPlotPanner(this->canvas()))->setMouseButton(Qt::RightButton);

    //y轴在放大的时候,坐标不变化
    (new QwtPlotMagnifier(this->canvas()))->setAxisEnabled(QwtPlot::yLeft,false);


    //一个选择器,十字线,以xBottom和yLeft坐标
    picker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft,
                               QwtPlotPicker::CrossRubberBand, QwtPicker::AlwaysOn,
                               this->canvas());
    picker->setStateMachine(new QwtPickerDragPointMachine());//拖拽点起作用
    picker->setRubberBandPen(QPen(QColor(Qt::white)));
    picker->setTrackerPen(QColor(Qt::yellow));



    setAutoFillBackground(true);

    this->canvas()->setPalette(QPalette (QColor(Qt::darkCyan)));

    setTitle("sin(x) and cos(x)");

    //这个会根据画板中的图在RightLegend显示一个图例
    insertLegend(new QwtLegend(),QwtPlot::RightLegend);


    QwtPlotGrid *grid = new QwtPlotGrid;//网格
    grid->enableXMin(true);
    grid->setMajPen(QPen(Qt::white, 0, Qt::DotLine));//大格子
    grid->setMinPen(QPen(Qt::gray, 0 , Qt::DotLine));//大格子里的小格子
    grid->attach(this);




    initAxes();
    initCurves();
}


void Plot::initAxes()
{


    setAxisTitle(QwtPlot::yLeft, QObject::trUtf8("y 轴"));
    setAxisScale(QwtPlot::yLeft, -1.0, 1.0);

    setAxisTitle(QwtPlot::xBottom,QObject::trUtf8("x 轴"));
    setAxisScale(QwtPlot::xBottom,-5.0,5.0);
}

void Plot::initCurves()
{
    sinCurve = new QwtPlotCurve("y = sin(2x)");
    //切换渲染提示 启用抗锯齿
    sinCurve->setRenderHint(QwtPlotItem::RenderAntialiased);
    sinCurve->setLegendAttribute(QwtPlotCurve::LegendShowLine);
    sinCurve->setPen(QPen(Qt::yellow));
    sinCurve->attach(this);


    cosCurve = new QwtPlotCurve("y = cos(x)");
    cosCurve->setRenderHint(QwtPlotItem::RenderAntialiased);
    //这个会改变曲线在QwtLegend显示的样式,可以是线,矩形,符号,
    cosCurve->setLegendAttribute(QwtPlotCurve::LegendNoAttribute);
    cosCurve->setPen(QPen(Qt::red));
    cosCurve->attach(this);

    sinCurve->setData(new FunctionData(_sin2));
    cosCurve->setData(new FunctionData(::cos));

}




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qwt学习一 的相关文章

  • 头文件atlstr.h使用错误问题

    我的代码编译时出现如下错误 xff1a Error 33 fatal error LNK1120 1 unresolved externals Error 32 error LNK2001 unresolved external symbo
  • ubuntu编译服务器搭建

    我们现在开始做Android项目 xff0c 编译Android源码必不可少 但是Android编译需要Linux平台 xff08 一般都采用ubuntu xff09 xff0c 而且各种环境搭建繁杂 xff0c 编译时间长 xff0c 占
  • SWDL学习篇

    WSDL 学习篇 1 什么是WSDL WSDL 是网络服务描述语言 xff0c 使用xml 编写 xff0c 是xml 文档 xff0c 可规定服务的位置以及提供服务的操作和方法 2 WSDL 文档结构 1 lt portType gt 元
  • linux面试题

    1 在Linux系统中 以 文件 方式访问设备 2 Linux内核引导时 从文件 etc fstab 中读取要加载的文件系统 3 Linux文件系统中每个文件用 i节点 来标识 4 全部磁盘块由四个部分组成 分别为 引导块 专用块 i节点表
  • MySql学习笔记(一)MySql卸载和安装说明

    MySql卸载 开始 控制面板 程序和功能 MySQL server xx 卸载 删除 C Program Files x86 MySQL 文件 删除 C ProgramData MySQL 文件 xff08 隐藏目录 xff09 如果以上
  • MySql学习笔记(二)MySql配置文件和服务操作说明

    Mysql配置文件说明 MySQL MySQL ServerX X my ini mysqld 为服务端配置 xff0c 服务端端口号 port 61 3306 安装目录 basedir 61 34 C Program Files MySQ
  • MySql学习笔记(三)MySql常用命令说明

    一 数据库命令 1 1显示数据库命令 命令 xff1a mysql gt show databases 执行后 xff1a 43 43 Database 43 43 information schema mysql performance
  • ubuntu 使用dpkg手动安装deb包时发生循环依赖的解决办法

    将循环依赖的所有包放到同一个命令行里一起安装 xff0c 如 xff1a sudo dpkg i libnss3 nssdb 3 28 4 0ubuntu0 14 04 4 all deb libnss3 3 28 4 0ubuntu0 1
  • 什么是源端口和目的端口

    源端口就是指本地端口 目的端口就是远程端口 一个数据包 xff08 pocket xff09 被解封装成数据段 xff08 segment xff09 后就会涉及到 连接上层协议的端口问题 很多人都在源端口和目的端口这两个概念上犯迷糊 xf
  • ini文件

    关于ini 文件的存储于加载 xff0c 初次遇到 xff0c 刚接触ini 文件 xff0c 我想我该把它记下 xff0c 以后提醒自己要常用 参数 保存 xff1a 参数结构体 struct TextConfig int nVol 音量
  • MIUI9线刷包精简

    MIUI9线刷包精简 1 说明 xff1a 系统包一经修改 xff0c 将无法通过OTA升级 xff08 可能只是修改system分区的无法OTA升级 xff0c 一般精简都修改system分区 xff0c system分区未修改的能不能O
  • logback高级特性使用(三)

    本文转自 xff1a 点击打开链接 异步记录日志 注意 xff1a 该功能需要高版本才能支持 xff0c 如1 0 11 AsyncAppender xff0c 异步记录日志 工作原理 xff1a 当Logging Event进入Async
  • spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)

    本文转自 xff1a 点击打开链接 SPRING官方网站改版后 xff0c 建议都是通过 Maven和Gradle 下载 xff0c 对不使用 Maven和Gradle 开发项目的 xff0c 下载就非常麻烦 xff0c 下给出Spring
  • ThreadLocal是否会引起内存溢出?

    本文参考 xff1a 点击打开链接 最近碰到一个使用ThreadLocal时因为未调用remove 而险些引起内存溢出的问题 xff0c 所以看了下ThreadLocal的源码 xff0c 结合线程池原理做一个简单的分析 xff0c 确认是
  • JS判断日期范围(日期范围应在一个月之内)

    本文转自 xff1a 点击打开链接 之前的一个项目的日期选择功能由单个日期 xff0c 修改为日期范围 xff0c 用到了日期范围的判断 xff0c 使用JS实现 xff0c 希望对需要的人有所帮助 代码如下 xff1a var start
  • python视频教程大全集下载啦

    本文转自 xff1a 点击打开链接 python3英文视频教程 全87集 http pan baidu com s 1dDnGBvV python从入门到精通视频 xff08 全60集 xff09 链接 xff1a http pan bai
  • 如何关闭ubuntu alt快捷键

    本文转自 xff1a 点击打开链接 有时候发现ubuntu的alt快捷键真是太烦人了 xff0c 动不动就能把搜索框呼唤出来 xff0c 尤其是我在ubuntu上装了win7虚拟机 xff0c 喜欢用qq的alt 43 s发送消息 xff0
  • ubuntu安装原生迅雷,让下载成为简单

    今天想到电影天堂下点电影 xff0c 发现TM全都是迅雷链接 xff0c 旋风链接什么的 无奈自带的BT下载器速度又慢 xff0c 又满足不了日常的一些文件下载 于是乎google了下 xff0c 哎呀 xff0c 有个mldonkey的电
  • Android 采用fastboot刷system.img boot.img recovery.img’

    手机正常启动后 xff0c 命令行模式下输入 adb reboot bootloader 该命令会自动进入fastboot模式 接着 xff1a fastboot devices 查看是否有设备 erase 擦除的意思 xff0c 你懂得
  • Executors.newSingleThreadExecutor的一些坑

    还是直接上源码吧 public static ExecutorService newSingleThreadExecutor return new FinalizableDelegatedExecutorService new Thread

随机推荐

  • 学习AOP之透过Spring的Ioc理解Advisor

    本文转自 xff1a 点击打开链接 花了几天时间来学习Spring xff0c 突然明白一个问题 xff0c 就是看书不能让人理解Spring xff0c 一方面要结合使用场景 xff0c 另一方面要阅读源代码 xff0c 这种方式理解起来
  • 计算广告资料汇总

    papers 计算广告论文 学习资料 业界分享 王喆Paper Collection of Real Time Bidding Weinan Zhang计算广告干货整理 雪伦 在线课程 Introduction to Computation
  • 编辑器之神-vim的使用技巧

    vim VS emacs vim被誉为编辑器之神 xff0c 而emacs被誉为神之编辑器 中国文化博大精深 xff0c 他们究竟有什么区别呢 xff1f 作为emacs小白的我来说不想在这里献丑 xff0c 直接贴上一篇博客 xff0c
  • Linux离线环境安装bzip2

    1 下载离线安装包 bzip2 1 0 6 13 el7 x86 64 rpm http mirror centos org centos 7 os x86 64 Packages bzip2 1 0 6 13 el7 x86 64 rpm
  • Vivado使用与注意事项

    作者 QQ群 xff1a 852283276 微信 xff1a arm80x86 微信公众号 xff1a 青儿创客基地 B站 xff1a 主页 https space bilibili com 208826118 DRC INBB 3 Bl
  • Android Beam 详细实现步骤

    前言 最近没怎么写东西了 xff0c 主要是在了解Beam这个东东 找到一些高手写的文章 xff0c 奈何水平有限看的云里雾里的 没办法 xff0c 只好去复习官方文档 正文 xff1a 先摘取一部分官方文档 xff1a Beaming N
  • Qt中UTF-8转Unicode

    include lt QtCore QCoreApplication gt include lt QDebug gt include lt iostream gt include lt QTextCodec gt int main int
  • Qt中unicode转utf-8

    最经在研究AT指令接受短信 xff0c 短信是unicode编码 xff0c 接受后需要根据系统的编码方案进行相关的转码 比如接受到了一串字符4F60597D xff0c 它是 你好 的unicode编码 xff0c 一个unicode编码
  • 移植qt5.3.1到arm

    最近刚入手一款开发板 比较低端 刚毕业工作还没一个月 穷屌丝一个 在学校以前都是用的是Friendly Arm的6410 使用的qt版本是使用的最多的4 7 0版本 入手的板子是4 7 4 qt5出来也有好长的时间了 其中提供了很多的特性
  • Linux下生产者与消费者的线程实现

    代码见 现代操作系统 第3版 为了显示效果 xff0c 添加了printf 函数来显示运行效果 1 include lt stdio h gt 2 include lt pthread h gt 3 define MAX 20 4 pthr
  • 基于TCP协议的视频传输

    这个程序是为了大二上学期一个设计作业 xff0c 写的太水 xff0c 之前也发过 xff0c 那个不是最新版 xff0c 这个找到了可能是最新版的 xff0c 昨晚调试了下 xff0c 没用 xff0c 是一个itcol的函数操作无效 x
  • 使用nginx作为websocket的proxy server

    WebSocket WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择 其为HTML5的一部分 WebSocket相较于原来开发这类app的方法来说 其能使开发更加地简单 大部分现在的浏览器都支持Web
  • 前后端分离开发部署模式

    身体出了点小毛病 xff0c 这周基本在家养病 xff0c 转文章一篇 xff0c 以激励学习 在开始讨论这个话题之前我们先来认识一下传统的开发模式 一 传统开发模式 相信很多做过Web开发童鞋应该都会经历这样一种开发模式 xff0c 利用
  • I2C总线协议

    毕业设计中使用到了AT24C04器件 xff0c 其是Ateml公司出品的 xff0c 是一种低功耗CMOS串行EEPROM xff0c 其使用两线串行的总线和控制器进行通讯 其内部保存的数据在掉电的情况下可以有40年以上的有效期 其采用8
  • Spark--用Java开发微服务

    这个说的Spark不是apache的Spark xff0c 这边说的是一个java的web application的框架 官网 http sparkjava com 我做过一段时间的后台架构开发 xff0c 使用的是微服务架构 xff0c
  • MQTT协议与mosquitto的安装使用

    MQTT xff08 Message Queuing Telemetry Transport xff0c 消息队列遥测传输 xff09 是一种标准化的发布 订阅消息传输协议 它是一种非常轻量级的协议 xff0c 由于对带宽需求很低 xff0
  • Linux 文件锁

    在文已经共享的情况下如何操作 xff0c 也就是当多个进程同时操作同一个文件时 xff0c 我们怎么保证文件数据的正确性 linux通常采用的方法是文件上锁 xff0c 来避免共享资源的产生竞争状态 文件锁包括建议性锁和强制性的锁 建议性的
  • 基于qt的多线程视频采集与传输

    将服务端的设备虚拟化 xff0c 供客户端调用 使用TCP IP协议传输 xff0c 使用V4L2实现视频采集 只是实现了简单的功能 资源占用大 xff0c 线程的终结还有问题 xff0c 数据大 xff0c 不知道用什么技术压缩图片 这是
  • Qt元对象系统和模板机制的冲突

    Qt元对象系统是对为了Qt对象类型和信号与槽机制引进的 xff0c Qt的工具包中有一个元对象编译器 xff0c 它是为支持Qt元对象系统而产生一些额外C 43 43 代码 xff0c 这些编码会和源码一起被标准的C 43 43 编译器编译
  • qwt学习一

    学习这个东西方向对了 xff0c 就对了一半 今天我开始学习基于qt库的一个开源的绘制2维的统计图的库 qwt 我们画东西首先要有一个容器 xff0c 不然都是徒劳 xff0c 今天我们就介绍这个类 QwtPlot 它继承自QFrame和Q