Qwt QwtPlotMarker标记类详解

news2025/1/12 20:54:29

1.概述

QwtPlotMarker类是Qwt绘图库中用于在图表上绘制标记的类。标记可以是垂直或水平线、直线、文本或箭头等。它可用于标记某个特定的位置、绘制参考线或注释信息。

以下是类继承关系图:

2.常用方法

设置标记的坐标。传入x和y坐标值,标记将被放置在指定的位置。

setValue(double x, double y)

分别设置标记的x和y坐标。可以单独调用这些方法来更改标记的位置。

setXValue(double x)和setYValue(double y)

设置标记的文本标签。

void setLabel (const QwtText &)

设置标记的线条样式。可以选择实线、虚线和点线等样式。

setLineStyle(QwtPlotMarker::LineStyle style)

设置标记的线条画笔。传入一个QPen类型的对象,用于设定线条的颜色、宽度等属性。

setLinePen(const QPen &pen)

设置标记的符号样式。传入一个QwtSymbol类型的对象,用于设定标记的符号样式。

setSymbol(QwtSymbol *symbol)

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

attach(QwtPlot *plot)和detach()

3.代码示例

画了两根曲线,sin和cos,中间绘制了两个标记QwtPlotMarker,一个代表0轴,一个代表(1,0)点。

#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"

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, 2);//设置左Y轴范围

    // 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::gray );
    //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 = 2*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);

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

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

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

4.相关参考

Qwt QwtPlotCurve类详解-CSDN博客

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

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

相关文章

红黑树--讲解以及详细实现过程

目录 红黑树理解红黑树概念红黑树性质 红黑树实现红黑树图解基础结构实现插入实现 红黑树理解 红黑树概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…

六零导航页SQL注入漏洞复现(CVE-2023-45951)

0x01 产品简介 LyLme Spage&#xff08;六零导航页&#xff09;是中国六零&#xff08;LyLme&#xff09;开源的一个导航页面。致力于简洁高效无广告的上网导航和搜索入口&#xff0c;支持后台添加链接、自定义搜索引擎&#xff0c;沉淀最具价值链接&#xff0c;全站无商业推广…

前端(二十五)——前端实现 OCR 图文识别的详细步骤与示例代码

&#x1f601;博主&#xff1a;小猫娃来啦 &#x1f601;文章核心&#xff1a;前端实现 OCR 图文识别的详细步骤与示例代码 文章目录 简介确定使用的 OCR API创建前端界面添加图像上传功能发送识别请求和处理识别结果完善代码添加注释结论附录 简介 在现代应用程序中&#xff…

如何选择向量数据库|Weaviate Cloud v.s. Zilliz Cloud

随着以 Milvus 为代表的向量数据库在 AI 产业界越来越受欢迎&#xff0c;传统数据库和检索系统也开始在快速集成专门的向量检索插件方面展开角逐。 例如 Weaviate 推出开源向量数据库&#xff0c;凭借其易用、开发者友好、上手快速、API 文档齐全等特点脱颖而出。同样&#xff…

使用AOP切面实现日志记录功能

系列文章 1.SpringBoot整合RabbitMQ并实现消息发送与接收 2. 解析JSON格式参数 & 修改对象的key 3. VUE整合Echarts实现简单的数据可视化 4. Java中运用BigDecimal对字符串的数值进行加减乘除等操作 5. List&#xff1c;HashMap&#xff1c;String,String&#xff1e;&…

【Javascript】函数(变量作用域)

变量&#xff1a;全局变量&#xff0c;局部变量 全局变量 挂载到window对象上的 var a全局变量;console.log(a);var a全局变量;console.log(window.a);var a全局变量;在控制台里输入a也能打印a的值 局部变量 函数体内部声明的变量 var a全局变量;function test(){var b局部…

软考高级之系统架构师系列之UP、RUP、4+1视图、JAD、JRP、RAD

概述 软件工程是一个很庞杂的系统工程&#xff0c;而我们面对的软件需求也很复杂&#xff1a; 面对不同规模&#xff08;复杂度&#xff0c;模块量&#xff0c;用户量&#xff0c;开发周期等等&#xff09;的软件项目&#xff0c;人员储备不尽不同的开发团队也会采用不同的软…

数据可视化在行业解决方案中的实践应用 ——华为云Astro Canvas大屏开发研究及指南

本文主要探讨华为云Astro Canvas在数据可视化大屏开发中的应用及效果。首先阐述Astro Canvas的基本概念、功能和特性说明&#xff0c;接着集中分析展示其在教育、金融、交通行业等不同领域实际应用案例&#xff1b;之后&#xff0c;详细介绍使用该工具进行大屏图表创建的开发指…

22年下半年上午题

计算机指令集 cpu的构成 存储器 决策表 原型模型 白盒测试 活动图 构件图 半圆是需接口&#xff0c;满圆是供接口&#xff0c;上图有小错误。 故障类型 b-树 排序算法复杂度 二分查找平均比较次数 成功查找比较平均次数 失败查找平均比较次数 如有 OSI 模型层次对应典型机器…

Vue+ElementUI项目打包部署到Ubuntu服务器中

1、修改config/index.js中的assetsPublicPath: /,修改为assetsPublicPath: ./ assetsPublicPath: ./2、在build/utils.js中增加publicPath: ../../ publicPath: ../../3、打开终端&#xff0c;在根目录下执行npm run build进行打包&#xff0c;打包成功后会生成dist npm run…

前端使用 printJS 插件打印多页:第一页空白问题解决

printJS({printable: [data:image/jpg;base64,${this.printData.url}],type: image,style: media print { page {size: auto; margin: 0; } body{margin:0 5px}} // 解决出现多页打印时第一页空白问题 })

java基础 集合2

9.List遍历方式&#xff1a; 10.Arraylist底层原理&#xff1a; 11.Linklist底层原理&#xff1a; 1.LinkedList做队列和栈&#xff1a; package day01;import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List;publ…

Vue3 + Tsx 集成 ace-editor编辑器

Ace Editor介绍 Ace Editor&#xff08;全名&#xff1a;Ajax.org Cloud9 Editor&#xff09;是一个开源的代码编辑器&#xff0c;旨在提供强大的代码编辑功能&#xff0c;通常用于构建基于Web的代码编辑应用程序。它最初由Cloud9 IDE开发&#xff0c;现在由开源社区维护。 主…

计算机网络 第四章网络层

文章目录 1 网络层的功能2 数据交换方式&#xff1a;电路交换3 数据交换方式&#xff1a;报文交换4 数据交换方式&#xff1a;分组交换5 数据交换方式&#xff1a;数据报方式6 数据交换方式&#xff1a;虚电路方式及各种方式对比7 路由算法及路由协议8 IP数据报的概念和格式9 I…

数据存储成本降低50%!图匠数据搭载OceanBase全新出发

近日&#xff0c;AI 技术公司 ImageDT 图匠数据&#xff08;以下简称“图匠”&#xff09;上线 OceanBase。目前&#xff0c;公司两大核心业务“数货宝”、“数智柜”已全面接入 OB Cloud 云数据库&#xff0c;保障图匠一站式全渠道销售数字化闭环作战平台的每一笔「数据」都算…

浮动面试题

浮动元素特点&#xff1a;

找不到mfc100u.dll怎么解决,总结了多种修复方法帮你解决

首先&#xff0c;让我们来了解一下mfc100u.dll文件是什么&#xff1f;其实&#xff0c;mfc100u.dll是Microsoft Foundation Class(MFC)库中的一个动态链接库文件&#xff0c;它包含了一些常用的类、函数和变量等资源&#xff0c;用于支持Windows应用程序的开发。 那么&#xf…

顺序表的查找(按位查找、按值查找)(数据结构与算法)

顺序表的基本操作&#xff1a;按位查找、按值查找 顺序表的按位查找 GetElem(L, i) :按位查找&#xff0c;获取表L中第 i 个位置元素的值 #define MaxSize 10 //定义最大长度 typedef struct{ElemType data[MaxSize]; //用静态的“数组”存放数据元…

大模型如何商业变现?小i机器人发布华藏大模型生态

华藏通用大模型生态体系由“113”三部分组分&#xff0c;即&#xff1a;一个能力基座一项产品支撑三项服务保障。 今年以来&#xff0c;市场上各类人工智能大模型如雨后春笋&#xff0c;但如何将大模型进行科学的商业变现&#xff0c;成为摆在行业面前的一道难题。在刚刚召开的…

Nginx+cpolar实现内网穿透多个Windows Web站点端口

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名【总结】&#xff1a; 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载…