Qt 绘制图表 - Qt Charts版

一、前言

自从 Qt 发布以来,给广大跨平台界面研发人员带来了无数的福利。但是Qt自己却一直没有提供自带的图表库,这就使得 QWT、QCustomPlot 等第三方图表库有了巨大的生存空间,为了降低开发成本,大家都涌向了这些第三方库。这种情况一直持续到 Qt5.7 版本后 Qt Charts 的发布。Qt Charts 是 Qt 自带的组件库,包含折线、曲线、饼图、棒图、散点图、雷达图等等各种常用的图表。只是要注意协议的约束:GPLV3。

我们今天使用 QChartView 来做折线图。QChartView 派生自 QGraphicsView,但它可专门用来展示 QChart 图表。

二、概念热身

先给大家做一下概念热身。

坐标轴-QAbstractAxis:

图表中,一般都有 X、Y 坐标轴,复杂一些的还带有 Z 轴。对应到 Qt 的图表也有 X、Y 轴对象。但是今天,我们先不展开介绍。如果我们不创建轴坐标对应的对象,可以使用 Qt 的默认轴对象。后面我们会介绍用法。

系列-QAbstractSeries:

不论是曲线、饼图、棒图还是其他图表,其中展示的内容本质都是数据。一条曲线是一组数据,一个饼图也对应一组数据。在 Qt Charts 中,这些一组组的数据被称作系列。对应不同类型的图表 Qt 提供了不同的系列。系列除了负责存储、访问数据,应该还提供了数据的绘制方法,比如折线图和曲线图分别对应 QLineSerie 和 QSPLineSerie。我们可以用不同的系列达到不同的展示目的。

图例-Legend:

类似于 Excel,Qt Charts 中也提供了图例,并且还可以显示或者隐藏图例。

图表-QChart

Qt 提供了 QChart 类来封装前面所说的内容,比如坐标轴、系列、图例等。QChart 承担了一个组织、管理的角色。QChart 派生自 QGraphicsObject,因此它实际上是一个图元 item。我们可以从 QChart 获取到坐标轴对象、数据系列对象、图例等等,并且可以设置图表的主题、背景色等样式信息。

视图-QChartView:

负责 QChart 的展示。QChart 本身只负责图表内容的组织、管理。图表的展示由视图负责,这个视图就是 QChartView。QChartView 派生自 QGraphicsView,只是它专门提供了几个面向 QChart 的接口,比如 setChart(QChart*)等。

三、正文

好了概念热身完毕,下面进入主题:用 QChartView 绘制折线图。

步骤如下:

1、准备工作;

2、修改 pro 文件;

3、 提升 widget 控件为 QChartView;

4、修改头文件;

5、构建图表、构建系列,并将图表绑定到视图;

6、运行程序。

下面来分别看一下:

1、准备工作

需要在安装 Qt 时带上了 charts,否则后面工作无法开展。

  • 对于编译方式安装的 Qt,需要注意在 configure 时不要跳过 charts。
  • 对于安装包方式安装的 Qt,需要注意在安装时,确保 charts 组件被选中。

新建一个 Qt Widgets Application 项目。

2、修改 pro 文件

在 pro 中,使用如下语句包含 charts 库:

QT += charts


3、 提升 widget 控件为 QChartView

在绘制 ui 窗体时,从 designer 的工具箱中选择一个 “Widget” 类型的控件,然后在它上面单击鼠标右键,选择 “提升为”。

在弹出的界面中,填写 "提升的类名称" 为: QChartView,头文件名称会自动生成,我们不用关心。然后单击“添加”按钮即可。


4、修改头文件

在头文件中,我们需要添加下面两行代码:

#include <QtCharts>
QT_CHARTS_USE_NAMESPACE

这两句代码的作用是包含 QChart 所需的头文件,并声明 Qt Charts 的命名空间。


5、构建图表、构建系列,并将图表绑定到视图

在 Wdiget 的构造函数中添加以下代码:

// 构建图表对象
QChart* chart = new QChart();// 构建折线系列对象
QLineSeries *series = new QLineSeries();
for (quint32 i = 0; i < 100; i++) 
{// 参数 x 为循环自增变量 i,参数 y 为正弦函数Y值series->append(i, sin(static_cast<double>(0.6f*i)));
}// 将系列添加到图表
chart->addSeries(series);
// 基于已添加到图表的 series 来创建默认的坐标轴
chart->createDefaultAxes(); // 将图表绑定到视图
ui->widget->setChart(chart);

上面的代码构建了一个 QChart 对象,然后构建了一个折线系列对象,并且对它进行初始化。方法是调用 append() 接口,传递的参数 x、y 对应的是一组坐标数据,就是折线上的一个点。然后,将系列添加到图表,并创建默认的坐标轴。最后,将图表绑定到视图。

6、运行程序

运行程序,效果如下:

用Qt Charts绘制,大概分为四个部分:数据(QXYSeries)、图表(QChart)、坐标轴(QAbstractAXis)和视图(QChartView)。

要注意的是 QChart要先添加数据(QXYSeries),再加载坐标轴(加载轴的过程是先添加轴到 Chart 上,再附加轴到 Series 上)。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Highcharts 饼图数据是0的时候不显示

Highcharts 数据为0 时饼图的扇形不显示。 echarts 数据为0时会平分各项 Highcharts 平分的方法是当所有项的数据都为0时&#xff0c;把各项的值改为1这样就能平分&#xff0c;但是选中显示的数据还是0&#xff0c;解决的方法是加一个标志然后配置tooltip 参考Highcharts mak…

让v-charts中的图例显示在图表的下方以及解决title不生效问题

效果图&#xff1a; 1、让v-charts中的图例显示在图表的下方&#xff1a; 在 <ve-line :data"chartData" :legend"legend" ></ve-line>添加legend属性 并在data中加上this.legend { bottom: "0" };这样就完美解决了 2、解决title…

PPT 图表不显示对应类型的数据解决办法

晚上制表发现少了一行&#xff08;“10月”的一行&#xff09;&#xff0c;思来想去是这个原因&#xff1a; 记得在右键 “编辑数据” 时、在弹出的 excel 窗格中&#xff0c;首先拖动鼠标把紫色的框往下移&#xff0c;把 “10月” 的那一行也框进紫色的范围内。然后数据就正常…

moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解

☞ ░ 前往老猿Python博文目录 ░ 一、概述 在《moviepy音视频剪辑&#xff1a;moviepy中的剪辑基类Clip详解》和《moviepy音视频剪辑&#xff1a;moviepy中的剪辑基类Clip的属性和方法详解》介绍了剪辑相关类及类关系。可以看到视频剪辑类VideoClip是其中非常重要的一个剪辑…

一款非常实用的视频剪辑软件,它可以满足您进行视频制作的需要

剪映专业版是一款非常实用的视频剪辑软件&#xff0c;它可以满足您进行视频制作的需要&#xff0c;使用剪映mac版能够轻松对视频进行各种编辑&#xff0c;包括卡点、去水印&#xff0c;特效制作、倒放、变速等&#xff0c;还有专业风格滤镜&#xff0c;精选贴纸给你的视频加点乐…

Nature重磅!Google DeepMind推出AlphaDev,用AI打破十年算法封印!

来源 | 新智元 今天&#xff0c;「Alpha」家族再添一名新成员&#xff1a;AlphaDev。 整个计算生态系统的基础&#xff0c;或将被AI创造的新算法颠覆&#xff01; 谷歌大脑和DeepMind合体没多久&#xff0c;就带来这样一个惊世之作。 AlphaDev不仅可以将排序算法提速70&#x…

谷歌将发布全新搜索引擎,你期待吗?

Google一身自带AI属性的新搜索最首要的目标并非急于取代传统搜索引擎&#xff0c;或者说彻底打败ChatGPT&#xff0c;而是能够用全新的产品说服用户&#xff0c;变得与竞争对手同样“强大、能力出众以及顺应AI潮流”。 对于Google而言&#xff0c;搜索就是命脉。Google每年的收…

两分钟速览谷歌2023IO大会:AI军备竞争,全线出击

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 5月10日周三&#xff0c;谷歌举办了年度开发者大会Google I/O 2023&#xff0c;在会上…

终极合体!谷歌大脑DeepMind正式联姻,1+1>OpenAI?

【导读】陷入被动的谷歌做出了一个重大决定&#xff1a;谷歌大脑和DeepMind正式合并&#xff0c;强强联合能否打赢OpenAI&#xff1f; 今天&#xff0c;谷歌终于放大招了&#xff01; CEO劈柴正式宣布&#xff0c;Google DeepMind成立&#xff0c;谷歌大脑和DeepMind两个世界…

碾压GPT-4!谷歌DeepMind CEO自曝:下一代大模型将与AlphaGo合体

【新导读】谷歌DeepMind CEO Hassabis全新爆料&#xff1a;全新Gemini模型将结合进AlphaGo和大语言模型&#xff0c;成本预计是数千万美元&#xff0c;甚至数亿。 谷歌&#xff0c;是真的破釜沉舟了。 传说中合并了AlphaGo和类GPT-4大模型的Gemini&#xff0c;终于要来了吗&a…

重磅!谷歌官宣谷歌大脑与DeepMind合并

两大世界领先级团队强强联手&#xff0c;一场大战即将开幕。 作者 | 黄楠 编辑 | 陈彩娴 当地时间 4 月 20 日&#xff0c;谷歌母公司 Alphabet CEO Sundar Pichai &#xff08;皮猜&#xff09;在官网发文宣布&#xff0c;正式将谷歌大脑和 DeepMind 两大团队合并&#xff0c;…

twitter推文案例

案例内容:twitter的推文案例。 文章目录 UserByScreenName-API游客IDauthorizationguest-tokenUserTweets-API完整代码经测试:用户推文只能翻22页,1页45条左右。 每个用户最多获取最近900条推文 (登录后),不登录区别也不大。 UserByScreenName-API 一般只有用户名的时候,…

揭开AI神秘面纱:精准识别机器生成文本,捍卫人工创作的最后防线!

随着 AI 的飞速发展&#xff0c;我们面临着前所未有的挑战。如今&#xff0c;大型语言模型生成的文本与人类撰写的文本越来越难以区分&#xff0c;这导致了引导公众舆论、传播虚假新闻以及学术不端等一系列问题。为此&#xff0c;腾讯 AI Lab 和浙江大学、西湖大学、香港大学的…

选题和需求说明

选题说明——编译课程平台 编译课程是计算机学院、软件学院的核心专业课&#xff0c;每年有着400的学生用户量。现有的编译课程平台使用judge平台开发&#xff0c;在UI布局、实验指导书、评测反馈、评测功能、讨论区设计等方面存在问题。 我们希望设计一个集成学生端和管理端…

微软开放 Bing Chat AI 访问

微软开放 Bing Chat 访问&#xff0c;用户不再需要等待。用户所需要是使用自己的微软账号登陆 Bing 或 Edge 浏览器。该功能目前不对中国大陆地区用户开放。微软还在升级 Bing Chat&#xff0c;将加入对插件的支持。微软是在从 2 月初开始提供 Bing Chat 的非公开预览&#xff…

微信小程序集成腾讯云即时通信IM

这里写自定义目录标题 腾讯云即时通信IM新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注…

常见即时通讯:网易IM 、腾讯IM、环信IM、融云IM、leancloud IM介绍

功能对比 功能网易云信环信融云leancloud云通信基础聊天支持支持支持支持支持群组聊天最多2000人最多2000人最多3000人最多500人最多10000聊天室支持最多5000人支持建议最多5000人支持图片消息支持支持支持支持支持视频消息支持支持不支持支持支持微视频音频消息支持支持支持支…

大数据-数仓-数据采集-业务数据(一):全量同步(DataX、Sqoop) v.s. 增量同步(Maxwell、Canal)

一、全量同步策略 解释&#xff1a;每日全量&#xff0c;就是每天都将业务数据库中的全部数据同步一份到数据仓库&#xff0c;是保证两侧数据同步的最简单的方式适用&#xff1a;表数据量不大&#xff0c;且每天即会有新数据插入&#xff0c;也会有旧的数据修改例如&#xff1…

国际短信平台短信路由搭建后台软件定制-移讯云短信系统

国际短信平台短信路由搭建后台软件定制-移讯云短信系统 什么是短信路由 短信路由是指当短信发送时&#xff0c;不通的关键字内容&#xff0c;不同的地区进行线路分流。实现压缩成本速度和质量保证。 新的客户端客户登录后发送短信时可自行选择用哪个通道来进行发送短信。每个通…

2023爱分析·云原生智能运维中台市场厂商评估报告:秒云(miaoyun.io)

目录 1. 研究范围定义 2. 云原生智能运维中台市场定义 3. 厂商评估&#xff1a;秒云&#xff08;miaoyun.io&#xff09; 4. 入选证书 1. 研究范围定义 数字化时代&#xff0c;应用成为企业开展各项业务的落脚点。随着业务的快速发展&#xff0c;应用的功能迭代变得越…