Qwt QwtPlotGrid网格类详解

news2024/11/21 0:36:52

1.概述

QwtPlotGrid类是Qwt绘图库中用于绘制网格的类。网格是图表中用于显示坐标轴刻度之间的辅助线的一种视觉元素。使用QwtPlotGrid类可以方便地添加水平和垂直网格线到绘图区域上。

以下是类继承关系图:

2.常用接口

分别启用或禁用x和y轴上的网格线。

enableX(bool enable)和enableY(bool enable)

分别启用或禁用x和y轴上的最小网格线。

enableXMin(true)和enableYMin(true); 

分别设置网格的主要线和次要线的画笔。可以使用QPen对象来设置线条的颜色、宽度等属性。

setMajorPen(const QPen &pen)和setMinorPen(const QPen &pen)

指定x轴比例分割。

void setXDiv (const QwtScaleDiv &)

指定y轴比例分割。

void setYDiv (const QwtScaleDiv &)

将网格附加到或从QwtPlot中分离。attach()方法用于将网格添加到QwtPlot图表中,而detach()方法则用于从图表中移除网格。

attach(QwtPlot *plot)和detach()

3.示例

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qwt_plot.h"
#include "qwt_plot_curve.h"
#include "qwt_text.h"
#include "qwt_legend.h"
#include "qwt_symbol.h"
#include "qwt_plot_marker.h"
#include "qwt_plot_grid.h"
#include "qwt_scale_div.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QwtPlot *plot = new QwtPlot(QwtText("sin and cos"),this);
    //设置背景色
    plot->setCanvasBackground(QBrush(QColor(Qt::white)));

    //添加图例
    QwtLegend *legend = new QwtLegend();
    plot->insertLegend(legend);

    //设置坐标轴标题
    plot->setAxisTitle(QwtAxis::YLeft,QwtText("Y坐标轴"));
    plot->setAxisTitle(QwtAxis::XBottom,QwtText("X坐标轴"));
    plot->setAxisScale(QwtAxis::YLeft, -1, 1);//设置左Y轴范围
    plot->setAxisScale(QwtAxis::XBottom, 0, 4);//设置左Y轴范围

    //自定义X轴的刻度值
    QwtScaleDiv gridDiv( 0.0, 4.0, QList<double>(), QList<double>(), QList<double>() << 0.2 << 0.4 << 0.6 << 0.8 );
    plot->setAxisScaleDiv( QwtAxis::XBottom, gridDiv );

    // add curves1
    QwtPlotCurve *curve1 = new QwtPlotCurve( "cos" );
    curve1->setRenderHint( QwtPlotItem::RenderAntialiased );
    curve1->setPen( Qt::blue );
    //curve1->setBrush(QBrush(QColor(Qt::red)));
    curve1->setLegendAttribute( QwtPlotCurve::LegendShowLine );
    curve1->setYAxis( QwtAxis::YLeft );
    curve1->setStyle(QwtPlotCurve::Lines);
    curve1->attach( plot );

    // add curves2
    QwtPlotCurve *curve2 = new QwtPlotCurve( "sin" );
    curve2->setRenderHint( QwtPlotItem::RenderAntialiased );
    curve2->setPen( Qt::darkGreen );
    //curve3->setBrush(QBrush(QColor(Qt::black)));
    curve2->setLegendAttribute( QwtPlotCurve::LegendShowLine );
    curve2->setYAxis( QwtAxis::YLeft );
    curve2->setStyle(QwtPlotCurve::Lines);
    curve2->attach( plot );

    int numPoints = 100;
    QVector<QPointF> points1;
    QVector<QPointF> points2;
    for (int i = 0; i < numPoints; ++i) {
       double x = 4*i / (double)(numPoints - 1); // x范围从0到2
       double y = sin(2 * M_PI * x); // 计算sin函数的y值
       double y2 = cos(2 * M_PI * x); // 计算sin函数的y值
       points1.append(QPointF(x, y));
       points2.append(QPointF(x, y2));
    }

    curve1->setSamples(points2);
    curve2->setSamples(points1);

    // 创建水平参考线标记
    QwtPlotMarker *lineMarker = new QwtPlotMarker();
    lineMarker->setLabel(QwtText("zero axis")); // 设置标记的文本标签
    lineMarker->setLabelAlignment(Qt::AlignRight | Qt::AlignTop); // 设置标签的对齐方式
    lineMarker->setLabelOrientation(Qt::Horizontal); // 设置标签的方向为水平
    lineMarker->setLineStyle(QwtPlotMarker::HLine); // 设置标记的线条样式为水平线
    lineMarker->setLinePen(Qt::red, 2.0); // 设置标记的线条颜色和宽度
    lineMarker->setValue(0.0, 0.0); // 设置标记的坐标位置

    // 创建文本标记
    QwtPlotMarker *textMarker = new QwtPlotMarker();
    textMarker->setLabel(QwtText("(1,0)")); // 设置标记的文本标签
    textMarker->setLabelAlignment(Qt::AlignCenter | Qt::AlignTop); // 设置标签的对齐方式
    textMarker->setLabelOrientation(Qt::Horizontal); // 设置标签的方向为水平
    textMarker->setLineStyle(QwtPlotMarker::NoLine); // 设置标记没有线条
    textMarker->setXValue(1); // 设置标记的x坐标
    textMarker->setYValue(0); // 设置标记的y坐标
    // 将标记附加到QwtPlot中
    lineMarker->attach(plot);
    textMarker->attach(plot);

    // 创建网格对象
    QwtPlotGrid *grid = new QwtPlotGrid();

    // 启用x轴和y轴上的网格线
    grid->enableX(true);
    grid->enableY(true);

    grid->enableXMin(true);
    grid->enableYMin(true);

    // 设置网格线的画笔
    grid->setMajorPen(QPen(Qt::lightGray, 0, Qt::SolidLine));
    grid->setMinorPen(QPen(Qt::lightGray, 0, Qt::DotLine));

    // 将网格附加到QwtPlot图表中
    grid->attach(plot);

    // finally, refresh the plot
    plot->replot();

    ui->verticalLayout->addWidget(plot);
}

MainWindow::~MainWindow()
{
    delete ui;
}

4.相关推荐

Qwt QwtPlotCurve曲线类详解-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化改进YOLOv5算法:加入ODConv+ConvNeXt提升小目标检测能力——(超详细)

为了提升无人机视角下目标检测效果,基于YOLOv5算法,在YOLOv5主干中实现了Omnidimensional Convolution(ODConv),以在不增加网络宽度和深度的情况下提高精度,还在YOLOv5骨干网中用ConvNeXt块替换了原始的C3块,以加快检测速度。 1 Omni-dimensional dynamic convolution …

Docker 容器服务的注册、发现及Docker安全

目录 Docker容器服务的注册和发现 1、什么是服务注册与发现&#xff1f; 2、什么是consul consul的部署 1、环境准备 2、部署consul服务器 1&#xff09;建立 Consul 服务 2&#xff09;设置代理&#xff0c;在后台启动 consul 服务端 3&#xff09;查看集群信息 4&a…

VSCode:清理ipch缓存

VSCode使用了一段时间&#xff0c;发现有些变慢&#xff0c;电脑管家扫描后&#xff0c;提示“AppData\Local\Microsoft\vscode-cpptools\ipch”目录下有很多缓存文件可以清理。 查询了一下&#xff1a;C/C 扩展常见问题解答 (visualstudio.com) 该件夹内包含缓存的预编译头文…

vscode markdown 使用技巧 -- 如何快速打出一个Tab 或多个空格

背景描述&#xff1a; 我在使用VSCode&#xff0c;这玩意很好用&#xff0c;但是&#xff0c;有一个缺点是&#xff0c;我想使用Tab来做一些对齐&#xff0c;但是我发现在VSCode中&#xff0c;无论是Tab还是多个空格&#xff0c;最终显示出来的都是一个空格 使用代码可以实现打…

基于ssm的宠物医院管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

搞定蓝牙——第四章(GATT协议)

搞定蓝牙——第四章&#xff08;GATT协议&#xff09; 原理介绍层次结构server和client端Attribute ESP32代码 文章下面用的英文表示&#xff1a; server和client&#xff1a;服务端和客户端 char.&#xff1a;characteristic缩写&#xff0c;特征 Attribute:属性 ATT:Attribut…

02第二课 指标与指标体系

二、如何获得数据:指标体系与用户路径 Q1 指标可以用来干什么? 建立指标体系目的是获得全面而充足数据支撑,通过分析,从而发现问题、或得出主观问题的结论。 优秀的指标体系在制定每个指标时,会与业务目标密切关联,紧密围绕活动策略,数据结果可以有效的衡量产品的健康…

JAVA基础(JAVA SE)学习笔记(九)异常处理

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第三阶段&#xff1a;Java高级应用 9.异常处理 10.多线程 11.常用类和基础API 12.集合框架 13.泛型 14…

优咔科技创新连接方案助力高质量5G车联服务

上海优咔网络科技有限公司 CEO 闫楠 【摘要】本文就智能网联汽车对高质量5G车联服务的需求背景和行业趋势进行了分析&#xff0c;主要介绍采用5G双SIM卡的创新连接方案&#xff0c;重点讲述双SIM卡联网的端到端体系架构和技术方案&#xff0c;并就优咔科技全方位支撑行业领先车…

俄罗斯黑客利用Roundcube零日漏洞窃取政府电子邮件

导语&#xff1a;最近&#xff0c;一起涉及Roundcube Webmail的零日漏洞被俄罗斯黑客组织Winter Vivern利用&#xff0c;攻击了欧洲政府机构和智库。这一漏洞已经存在至少一个月&#xff0c;直到10月16日&#xff0c;Roundcube开发团队才发布了安全补丁来修复这个Stored Cross-…

hibernate源码(1)--- schema创建

sessionFactory 配置项&#xff1a; hibernate的核心是sessionFactory&#xff0c;那我们看看如何构建session Factory。 参考官网&#xff1a; plugins {id("java") } group "com.atai.hibernatespy" version "1.0-SNAPSHOT" repositories…

【UE】抓取物体

目录 效果 步骤 一、制作准心 二、简单的第三人称视角偏移 三、基于屏幕正中央的打点与射线 四、物理抓取的实现&#xff08;抓取、放下、丢出&#xff09; 效果 步骤 一、制作准心 1. 新建一个HUD&#xff0c;这里命名为“HUD_ZhunXin”&#xff0c;同时复制一个第三人…

51单片机晶体管数字编码

51单片机 单片机型号&#xff1a;STC86C52RC/LE52RC 晶体管 数字编码 数字P0P1P2P3P4P5P6P7011111100101100000211011010311110010401100110510110110610111110711100000811111110911110110 00011 11110x3F10000 01100x0620101 10110x5B30100 11110x4F40110 01100x6650110 110…

Qt设计一个自定义的登录框窗口

今天写了一个Qt登录、注册的小demo&#xff0c;后续完善会连接MySQL使用&#xff0c;过几天写完我会放在github上。 主要页面&#xff1a; 动态演示&#xff1a; 写完这个界面后&#xff0c;我终于知道了Qt为什么几乎没什么好看的窗口设计了&#xff0c;随便写一个简单大方的登…

【OpenCV实现平滑图像处理】

文章目录 概要2D 卷积&#xff08;图像过滤&#xff09;模糊图像&#xff08;平滑图像&#xff09;中值模糊双边过滤小结 概要 在图像处理中&#xff0c;低通滤波器是一种常用的技术&#xff0c;用于平滑、模糊或降低图像的噪音。这种滤波器通过去除图像中高频部分&#xff08…

基于FPGA的电风扇控制器verilog,视频/代码

名称&#xff1a;基于FPGA的电风扇控制器verilog 软件&#xff1a;QuartusII 语言&#xff1a;Verilog 代码功能&#xff1a; 基于FPGA的电风扇控制器 运用 EDA SOPO实验开发系统设计一个基于FPGA的电风扇定时开关控制器,能实现手动和自动模式之间的切换。要求: (1)KI为电…

PLM如何与MES管理系统协同工作

产品生命周期管理&#xff08;PLM&#xff09;和MES生产管理系统是现代企业中不可或缺的生产管理工具。它们分别负责产品的设计和制造过程&#xff0c;对于提高企业的生产效率和产品质量具有重要作用。然而&#xff0c;要实现高效的生产管理&#xff0c;PLM和MES需要进行协同工…

Python---练习:使用for循环嵌套实现打印九九乘法表

思考&#xff1a; 外层循环主要用于控制循环的行数&#xff0c;内层循环用于控制列数。 基本语法&#xff1a; # 外层循环 for i in 序列1:# 内层循环for j in 序列2:循环体 序列1 序列2 &#xff0c;就可以是range(1, 10) -----也就是从1&#xff0c;到9。 参考while循环…

笔记43:ResNet 结构详解

笔记本地地址&#xff1a;D:\work_file\DeepLearning_Learning\03_个人笔记\2.图像处理任务\ResNet网络学习 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a

DTO、VO、BO、PO等各种XO汇总

贫血模型和富领域模型 1.POJO对象(Plain Old Java Object) Plain Old Java Object(POJO)&#xff0c;它的本来含义是指一个常规的、不受任何框架、平台的约束和限制的Java对象。可以认为&#xff0c;如果一个模块定义的对象皆为POJO&#xff0c;那么除了依赖JDK&#xff0c;它…