qt qchart学习

news2025/1/24 22:40:36

Qt Charts主要由QChartView、QChart、QLegend图例、坐标轴(由QAbstractAxis子类实现)、**数据源(由QAbstractSeries子类实现)**等组成

使用QChart的前期准备

1. Qt5.9及以上版本;

2. .pro文件中添加QT += charts

3. 在使用QChart的各个控件之前,引用头文件并必须先声明一个命名空间。如

#include <QtCharts>
using namespace QtCharts; 
或者是
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE 

QChartView

QChartView是QGraphicsView子类,相当于是显示图表的视图。

常用函数

  1. void setChart(QChart *chart); 设置图表。新图表的所有权被传递给图表视图,并且先前图表的所有权被释放。

  1. void setRubberBand(const QChartView::RubberBands &rubberBand) 设置橡皮筋标志

QChart

QChart是QGraphicsItem的子类,相当于是显示图表的图形项。

常用函数

//与序列相关的函数

  1. void addSeries(QAbstractSeries *series); //添加序列

  1. void removeSeries(QAbstractSeries *series);

  1. void removeAllSeries();

  1. QList<QAbstractSeries *> series() const; //获取序列

//与坐标轴相关的函数

  1. void setAxisX(QAbstractAxis *axis, QAbstractSeries *series = Q_NULLPTR);//过时了

  1. void setAxisY(QAbstractAxis *axis, QAbstractSeries *series = Q_NULLPTR);

  1. QAbstractAxis *axisX(QAbstractSeries *series = Q_NULLPTR) const;//过时了

  1. QAbstractAxis *axisY(QAbstractSeries *series = Q_NULLPTR) const;

  1. void addAxis(QAbstractAxis *axis, Qt::Alignment alignment);// 添加坐标轴。现在主要用这个函数

  1. void removeAxis(QAbstractAxis *axis);

  1. QList<QAbstractAxis*> axes(Qt::Orientations orientation = Qt::Horizontal|Qt::Vertical, QAbstractSeries *series = Q_NULLPTR) const; //获取坐标轴

//与图例相关的函数

  1. QLegend *legend() const; 获取图例,图例对象无法创建或删除,但可以通过 QChart 类引用。

序列(QAbstractSeries)

QAbstractSeries 类是所有 Qt 图表曲线的基类。通常,使用曲线类型特定的继承类而不是基类。也是数据源。

可以控制(序列是否显示序列、序列线条的颜色、画笔、画刷、透明度);序列(数据点的可见度、添加插入删除清除数据点);(数据点标签的可见性、颜色、字体、格式)

enum QAbstractSeries::SeriesType:此枚举描述了曲线的类型。
SeriesTypeLine:折线图。
SeriesTypeArea:面积图。
SeriesTypeBar:垂直条形图。
SeriesTypeStackedBar:垂直堆积条形图。
SeriesTypePercentBar:垂直百分比条形图。
SeriesTypePie:饼图。
SeriesTypeScatter:散点图。
SeriesTypeSpline:样条图。
SeriesTypeHorizontalBar:水平条形图。
SeriesTypeHorizontalStackedBar:水平堆积条形图。
SeriesTypeHorizontalPercentBar:水平百分比条形图。
SeriesTypeBoxPlot:箱线图。
SeriesTypeCandlestick:烛台图。

常用的函数:

//与坐标轴相关

  1. bool attachAxis(QAbstractAxis *axis); //序列和坐标轴关联

  1. bool detachAxis(QAbstractAxis *axis);

  1. QList<QAbstractAxis*> attachedAxes();//获取坐标轴

//与QChart相关

  1. QChart *chart() const;

//与添加删除操作相关

  1. void append(const QList<QPointF> &points); //折线图等的序列数据添加

  1. QXYSeries &operator << (const QPointF &point);//折线图等的序列数据添加

  1. void replace(int index, const QPointF &newPoint);

  1. void remove(const QPointF &point);

  1. void insert(int index, const QPointF &point);

  1. void clear();

坐标轴(QAbstractAxis)

折线图一般用QValueAxis数值坐标轴,或者是QLogValueAxis对数坐标轴。柱状图横坐标通常用文字,如QBarCategoryAxis类别坐标轴。

每个轴的元素(比如轴线,标题,标签,网格线,阴影,可见性)都是可以控制的。

常用函数

图例(QLegend)

图例(Legend)是对图表上显示的序列的示例说明,一般是有线条颜色和文字说明。QLegend是封装了图例控制功能的类,可以为每个序列设置图例中的文字,可以控制图例显示在图表的上、下、左、右不同位置。

图例对象无法创建或删除,但可以通过 QChart 类引用。如在QChart类调用legend函数得到图例指针。QLegend *legend() const;

enum MarkerShape { MarkerShapeDefault, MarkerShapeRectangle, MarkerShapeCircle, MarkerShapeFromSeries }

enum QLegend::MarkerShape:此枚举描述了渲染图例标记项时使用的形状。

MarkerShapeDefault:仅 QLegendMarker 项目支持此值。

MarkerShapeRectangle:矩形标记。

MarkerShapeCircle:圆形标记。

MarkerShapeRotatedRectangle:旋转的矩形标记。

MarkerShapeTriangle:三角形标记。

MarkerShapeStar:星形标记。

MarkerShapePentagon:五角形标记。

MarkerShapeFromSeries:标记形状由曲线决定。在散点曲线的情况下,图例标记看起来像一个散点,并且与该点的大小相同。对于直线或样条曲线,图例标记看起来像直线的一小段。对于其他曲线类型,显示矩形标记。

常用函数

  1. void setAlignment(Qt::Alignment alignment);图例与图表对齐方式

//与图例标记相关

  1. QList <QLegendMarker*> markers(QAbstractSeries *series = Q_NULLPTR) const; //返回图例中的标记列表

  1. void setShowToolTips(bool show);是否tip提示

图例标记(QLegendMarker)

对于图例还有一个类QLegendMarker,可以为每个序列的图例生成一个类似于QCheckBox的组件,在图例上单击序列的标记,可以控制序列是否显示。

图例标记由图标颜色标签组成:

图标颜色对应于用于绘制图表的颜色。

标签显示曲线的名称(或饼图的切片标签或条形图的条形集的标签)。

QLegendMarker 类是一个抽象类,可用于访问图例中的标记。是 QAreaLegendMarker、QBarLegendMarker、QBoxPlotLegendMarker、QCCandlestickLegendMarker、QPieLegendMarker、QXYLegendMarker 的父类。

enum QLegendMarker::LegendMarkerType:图例标记对象的类型。

LegendMarkerTypeArea:区域图的图例标记。

LegendMarkerTypeBar:条形图的图例标记。

LegendMarkerTypePie:饼图的图例标记。

LegendMarkerTypeXY曲线、样条线或散点图的图例标记。

LegendMarkerTypeBoxPlot:箱型图的图例标记。

LegendMarkerTypeCandlestick:烛台图的图例标记。

常用函数

  1. void setLabelBrush(const QBrush &brush); 标签的画刷

  1. void setBrush(const QBrush &brush);图标颜色画刷

  1. virtual LegendMarkerType type() = 0;

//与序列相关的函数

  1. virtual QAbstractSeries* series() = 0;

信号

  1. void clicked(); //用于点击图例标记的信号槽处理。

  1. void hovered(bool status);

   foreach (QLegendMarker* marker, chart->legend()->markers()) {
        QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked()));
        QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked()));
    }

void MainWindow::on_LegendMarkerClicked()
{
    QLegendMarker* marker = qobject_cast<QLegendMarker*> (sender());

    switch (marker->type())
    {
        case QLegendMarker::LegendMarkerTypeXY:
        {
            marker->series()->setVisible(!marker->series()->isVisible());
            marker->setVisible(true);
            qreal alpha = 1.0;
            if (!marker->series()->isVisible())
                alpha = 0.5;

            QColor color;
            QBrush brush = marker->labelBrush();
            color = brush.color();
            color.setAlphaF(alpha);
            brush.setColor(color);
            marker->setLabelBrush(brush);

            brush = marker->brush();
            color = brush.color();
            color.setAlphaF(alpha);
            brush.setColor(color);
            marker->setBrush(brush);

            QPen pen = marker->pen();
            color = pen.color();
            color.setAlphaF(alpha);
            pen.setColor(color);
            marker->setPen(pen);
            break;
        }
        default:
            break;
    }


}

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

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

相关文章

【前缀和】和为k的子数组 路径总和 III

文章目录和为k的子数组路径总和 III和为k的子数组 动态规划算法&#xff08;超时&#xff09; class Solution { public:int subarraySum(vector<int>& nums, int k) {int n nums.size();vector<vector<int>> dp(n, vector<int>(n, 0));int ans …

b2b b2c o2o分布式电子商务平台源码 mybatis+spring cloud

鸿鹄云商大型企业分布式互联网电子商务平台&#xff0c;推出PC微信APP云服务的云商平台系统&#xff0c;其中包括B2B、B2C、C2C、O2O、新零售、直播电商等子平台。 分布式、微服务、云架构电子商务平台 java b2b2c o2o 技术解决方案 开发语言&#xff1a; java、j2ee 数据库&am…

注解@Transactional 原理和常见的坑

这篇文章&#xff0c;会先讲述 Transactional 的 4 种不生效的 Case&#xff0c;然后再通过源码解读&#xff0c;分析 Transactional 的执行原理&#xff0c;以及部分 Case 不生效的真正原因1 项目准备下面是 DB 数据和 DB 操作接口&#xff1a;uidunameusex1张三女2陈恒男3楼仔…

百万医疗险是什么

一、百万医疗险是什么 从名字可以看出&#xff0c;这是一款医疗险。因为保额高&#xff0c;最高能报销百万&#xff0c;所以叫百万医疗险。 二、百万医疗险有什么用 可以报销被保险人因意外伤害和疾病导致的医疗费用 三、如何挑选 虽然高达几百万的保额&#xff0c;但保额却并非…

cas单点登录-自定义登录界面 / 自定义主题风格(三)

cas单点登录-自定义登录界面 / 自定义主题风格&#xff08;三&#xff09; 在前面的文章中&#xff0c;介绍了使用cas实现SSO单点登录&#xff0c;静态登录&#xff0c;使用mysql数据库登录。但是在登录时都是跳转到了同一个登录界面。 假设现在我有两个子站点app1.com&#x…

【Docker】初识Dcoker以及镜像操作(一)

目录 1.初识Docker 1.1.什么是Docker 1.1.1.应用部署的环境问题 1.1.2.Docker解决依赖兼容问题 1.1.3.Docker解决操作系统环境差异 1.1.4.小结 1.2.Docker和虚拟机的区别 1.3.Docker架构 1.3.1.镜像和容器 1.3.2.DockerHub 1.3.3.Docker架构 1.3.4.小结 1.4.安装D…

Three.js铅笔手绘效果实现

在这个教程中&#xff0c;我们将学习如何使用 Three.js 后处理创建铅笔手绘效果。 我们将完成创建自定义后处理渲染通道、在 WebGL 中实现边缘检测、将法线缓冲区重新渲染到渲染目标以及使用生成和导入的纹理调整最终结果的步骤。 这就是最终结果的样子&#xff0c;让我们开始…

NLP学习笔记(九) 分词(上)

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲分词算法 1 概述 分词是自然语言处理领域中的基础任务&#xff0c;是文本预处理的重要步骤 简单来说&#xff0c;就是将文本段落分解为基本语言单位&#xff0c;亦可称之为词元 ( token\text{token}token ) 按照粒度的不…

day50【代码随想录】动态规划之不同的子序列、两个字符串的删除操作、编辑距离

文章目录前言一、不同的子序列&#xff08;力扣115&#xff09;【hard】二、两个字符串的删除操作&#xff08;力扣583&#xff09;思路一思路二三、编辑距离&#xff08;力扣72&#xff09;【hard】前言 1、不同的子序列 2、两个字符串的删除操作 3、编辑距离 一、不同的子序…

网页扫描图像并以pdf格式上传到服务器端

本文描述如何通过网页驱动扫描仪、高拍仪等图像扫描设备进行图像扫描&#xff0c;扫描结果经编辑修改后以pdf压缩格式上传到后台java程序中进行服务器端落盘保存。图像扫描上传如文字描述顺序所介绍&#xff0c;先要驱动扫描设备工作&#xff0c;进行纸张数据的光学扫描操作形成…

Impacket工具使用

Impacket工具说明 Impacker是用户处理网络协议的Python类集合,用于对SAB1-3或IPv4/IPv6 上的TCP/UPD/ICMP/IGMP/ARP/IPv4/IPv6/SMB/MSRPC/NTLM/Kerberos/WMI/LDAP 等进行低级的编程访问,数据包可以从头开始构建,也可以从原始数据包中解析, 面向对象API使用处理协议的深层结构变…

Action Segmentation数据集介绍——Breakfast

文章目录简介细节Cooking actibitiesillustration of the actions论文讲解Breakfast&#xff08;The Breakfast Action Dataset&#xff09;简介 早餐动作数据集包括与早餐准备相关的10个动作&#xff0c;由18个不同厨房的52个不同的人执行。该数据集是最大的完全带注释的数据…

CCIE 350-401-实验全

实验 VRRP&#xff08;hello packettimes advertise&#xff09; This is a lab item in which tasks will be performed on virtual devices. Refer to the Tasks tab to view the tasks for this lab item.Refer to the Topology tab to access the device console(s) and p…

Spring Boot自动装配的原理

Spring Boot自动装配的原理自动装配的实现EnableAutoConfigurationAutoConfigurationImportSelectorSpring Boot中的自动装配&#xff0c;它是Starter的基础&#xff0c;也是Spring Boot的核心。那么什么叫自动装配呢&#xff1f;或者说什么叫装配呢&#xff1f; 简单来说&…

Vulnhub靶场----4、DC-4

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-4下载地址&#xff1a;https://download.vulnhub.com/dc/DC-4.zip kali&#xff1a;192.168.144.148 DC-4&#xff1a;192.168.144.152 二、渗透流程 端口扫描&#xff1a;nmap -T5 -p- -sV -sT -A 192.168.144.1…

ISIS协议

ISIS协议基础简介应用场景路由计算过程地址结构路由器分类邻居Hello报文邻居关系建立DIS及DIS与DR的类比链路状态信息的载体链路状态信息的交互路由算法网络分层路由域![在这里插入图片描述](https://img-blog.csdnimg.cn/9027c43b614a4399ae1f54e87a37f047.png)区域间路由简介…

【MySQL】表操作和库操作

文章目录概念库操作1.创建数据库2.删除数据库3.选择数据库4.显示数据库列表表操作1.创建数据表CREATE2.删除数据表DROP3.插入数据INSERT4.更新数据UPDATE5.修改数据ALTER6.查询数据SELECT7.WHERE子句8.ORDER BY子句9.LIMIT子句10.GROUP BY子句11.HAVING子句使用注意事项概念 M…

Java集合(一)---List和set

1.Java集合有哪些&#xff1f;集合类型主要有3种&#xff1a;set(集&#xff09;、list(列表&#xff09;和map(映射)Map接口和Collection接口是所有集合框架的父接口&#xff1a;1. Collection接口的子接口包括&#xff1a;Set接口和List接口2. Map接口的实现类主要有&#xf…

【Python】批量采集原神表情包~

嗨害大家好鸭~我是小熊猫(✿◡‿◡) 最近迷上了原神&#xff0c; 不自觉中就很喜欢保存广大旅行者制作的表情包~ 真的很有意思诶~ 源码资料电子书:点击此处跳转文末名片获取 一个个保存的话&#xff0c;好像效率很低嘛… 那我就发挥我小熊猫的老本行直接给把他们全部采集下…

零基础机器学习做游戏辅助第十三课--原神自动钓鱼(三)labelimg的使用

一、什么是labelimg labelimg是一款开源的图像标注工具,标签可用于分类和目标检测,它是用python写的,并使用Qt作为其图形界面,简单好用(虽然是英文版的)。其注释以 PASCAL VOC格式保存为XML文件,这是ImageNet使用的格式。此外,它还支持 COCO数据集格式。 二、安装label…