QML Charts组件之主题与动画

目录

    • 前言
    • 相关系列
    • ChartView 概述:主题与动画
    • 示例一:主题设置(ChartTheme.qml)
      • 图表与主题设置
      • 主题切换部分
    • 示例二:动画设置(ChartAnimation.qml)
      • 图表与动画属性部分
      • 分类轴与柱状图数据部分
      • 交互与动画触发
    • 结语
    • 源码下载
    • 参考

前言

在数据可视化中,既要有清晰的表达,也要有友好的观感。QML Charts组件 提供的 ChartView 组件内置主题与动画效果,能提升图表的展示效果。本文结合官方文档,系统介绍 ChartView 的主题与动画。


相关系列

  • QML Charts组件之图例
  • QML Charts组件之坐标轴共有属性

ChartView 概述:主题与动画

主题

  • 通过 ChartView.theme 设置整体配色和风格。
  • 常用枚举:ChartView.ChartThemeLightChartView.ChartThemeDarkChartView.ChartThemeQt 等。
  • 主题会影响背景、网格、轴线与序列颜色,适合快速统一风格。

动画

  • animationOptions 控制动画类别: ChartView.NoAnimation:无动画;ChartView.GridAxisAnimations:网格/坐标轴动画;ChartView.SeriesAnimations:序列(数据)动画 ;ChartView.AllAnimations:全部动画。
  • animationDuration:动画时长(毫秒)。

示例一:主题设置(ChartTheme.qml)

图表与主题设置

ChartView {id: chartViewtitle: "主题示例"titleFont.bold: truetitleFont.pointSize: 14anchors.fill: parentantialiasing: trueanchors.margins: 25theme: ChartView.ChartThemeLightValueAxis {id: valueAxisXmin: 0max: 4titleText: "X Title"}ValueAxis {id: valueAxisYmin: 0max: 16titleText: "Y Title"}LineSeries {name: "line"XYPoint { x: 0; y: 0 }XYPoint { x: 1; y: 1 }XYPoint { x: 2; y: 4 }XYPoint { x: 3; y: 9 }XYPoint { x: 4; y: 16 }axisX: valueAxisXaxisY: valueAxisY}
}

说明:

  • 开启抗锯齿 antialiasing: true,提升曲线与文字边缘平滑度。
  • theme 直接选用内置主题枚举,可随时切换。
  • ValueAxis 设置坐标范围与标题;LineSeries 绑定到 axisX/axisY

主题切换部分

Row {Text {text: "请选择主题:"}ComboBox {model: ListModel {id: modelListElement { text: "ChartThemeLight" }ListElement { text: "ChartThemeBlueCerulean" }ListElement { text: "ChartThemeDark" }ListElement { text: "ChartThemeBrownSand" }ListElement { text: "ChartThemeBlueNcs" }ListElement { text: "ChartThemeHighContrast" }ListElement { text: "ChartThemeBlueIcy" }ListElement { text: "ChartThemeQt" }}onActivated: {console.log(currentIndex)chartView.theme = currentIndex}}
}

说明: 通过 currentIndex 将下拉序号映射到 ChartView.ChartTheme 的枚举值。

运行效果:

在这里插入图片描述

效果描述:选择不同主题后,图表背景、网格线、坐标轴与折线颜色整体切换;字体与标注配色也随之变化。


示例二:动画设置(ChartAnimation.qml)

图表与动画属性部分

ChartView {id: chartViewtitle: "动画示例"titleFont.bold: truetitleFont.pointSize: 14anchors.fill: parentantialiasing: trueanchors.margins: 25animationDuration: 500// 此处设置会报错:Unable to assign int to QEasingCurve// animationEasingCurve: Easing.Linear// 应该是:animationEasingCurve.type: Easing.LinearanimationOptions: ChartView.SeriesAnimations
}

说明:

  • animationOptions: ChartView.SeriesAnimations 打开序列动画,数据变化时有平滑过渡。
  • animationDuration 为动画时长,单位为毫秒。
  • animationEasingCurve: Easing.Linear 会报错:Unable to assign int to QEasingCurve。(接下来详细说明错误原因)

问题原因:

  • ChartView.animationEasingCurve 的类型是 QEasingCurve(值类型),不是一个简单的枚举整型。
  • Easing.Linear 是一个枚举值(本质是 int)。直接写 animationEasingCurve: Easing.Linear 就会出现 “Unable to assign int to QEasingCurve”。
  • 在 QML 里 QEasingCurve 不是一个可直接实例化的对象类型(不能写成 QEasingCurve { ... }),因此用 QEasingCurve 也会报未定义/不可构造。

正确写法:

  • 把它当“分组属性”来用,给它的子属性赋值,尤其是 type

示例(替换现在被注释的那行):

animationEasingCurve.type: Easing.Linear

如需更多参数(仅当对应类型需要):

animationEasingCurve.type: Easing.OutElastic
animationEasingCurve.amplitude: 1.0
animationEasingCurve.period: 0.3

分类轴与柱状图数据部分

BarCategoryAxis {id: valueAxisXcategories: ["一月", "二月", "三月", "四月"]titleText: "X Title"
}ValueAxis {id: valueAxisYmin: 0max: 20titleText: "Y Title"
}BarSeries {name: "柱形图分类坐标轴示例"axisX: valueAxisXaxisY: valueAxisYBarSet {id: barSetlabel: "bar"values: [10, 15, 12, 18]}
}

说明:

  • BarCategoryAxis 用字符串分类作为 X 轴坐标。
  • BarSet.values 直接绑定数据数组,修改数组项即可触发动画。

交互与动画触发

Row {Text {text: "请选择类型:"}ComboBox {model: ListModel {id: modelListElement { text: "NoAnimationAnimation" }ListElement { text: "GridAxisAnimations" }ListElement { text: "SeriesAnimations" }ListElement { text: "AllAnimations" }}onActivated: {chartView.animationOptions = currentIndex// 改变柱形图的值, 触发SeriesAnimations动画效果barSet.values[0] = currentIndex + 2}}
}

说明:

  • 这里用 currentIndex 直接赋值给 animationOptions,依赖了枚举按 0…3 顺序排列。
  • 每次切换选项后更改 barSet.values[0],为了触发 SeriesAnimations 动画效果(update接口不起作用)。

运行效果:

在这里插入图片描述

效果描述:切换SeriesAnimations 类型后,柱形高度的动画会按照预设参数执行;开启全部动画时,坐标网格与序列同时出现流畅的动态效果。


结语

通过 ChartView 的主题与动画,我们可以在不修改业务数据的前提下,快速获得更友好的可视化效果。建议在工程中以显式枚举映射与正确的参数设置为基本规范,确保代码稳健且易于维护。


源码下载

Git Code 下载链接:QML Charts组件之主题与动画示例

在这里插入图片描述


参考

  • Qt 6 文档:ChartView

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

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

相关文章

【论文阅读】Security of Language Models for Code: A Systematic Literature Review

Security of Language Models for Code: A Systematic Literature Review 该论文于2025年被CCF A类期刊TOSEM收录,作者来自南京大学和南洋理工大学。 概述 代码语言模型(CodeLMs)已成为代码相关任务的强大工具,其性能优于传统方法…

[光学原理与应用-422]:非线性光学 - 计算机中的线性与非线性运算

在计算机科学中,线性运算和非线性运算是两类核心的数学操作,它们在算法设计、数据处理、机器学习等领域有广泛应用。两者的核心区别在于是否满足叠加原理(即输入信号的线性组合的输出是否等于输出信号的线性组合)。以下是详细解释…

Day21_【机器学习—决策树(3)—剪枝】

决策树剪枝是一种防止决策树过拟合的一种正则化方法;提高其泛化能力。决策树在训练过程中如果生长过深、过于复杂,会过度拟合训练数据中的噪声和异常值,导致在新数据上表现不佳。剪枝通过简化树结构,去除不必要的分支,…

从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案

🚀 从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案 🔗 项目地址:https://github.com/Haohao-end/LMForge-End-to-End-LLMOps-Platform-for-Multi-Model-Agents ⭐ 欢迎 Star &…

如何使显示器在笔记本盖上盖子时还能正常运转

1、搜索找到控制面板,打开进入 2、找到硬件和声音,进入 3、选择电源选项 4、选择 选择关闭笔记本计算机盖的功能 5、把关闭子盖时,改成不采取任何操作 参考链接:笔记本电脑合上盖子外接显示器依然能够显示设置_笔记本合上外接显示…

FPGA学习笔记——SDR SDRAM的读写(调用IP核版)

目录 一、任务 二、需求分析 三、Visio图 四、具体分析 1.需要注意的问题 (1)器件SDRAM需要的时钟 (2)跨时钟域(异步FIFO) 2.模块分析和调用 (1)SDR SDRAM IP核调用 &…

离散数学学习指导与习题解析

《离散数学学习指导与习题解析(第2版)》是屈婉玲、耿素云、张立昂编著的《离散数学(第2版)》的配套参考书,旨在为学生提供系统的学习指导和丰富的习题解析。本书内容全面,涵盖数理逻辑、集合论、代数结构、…

Qt网络通信服务端与客户端学习

Qt网络通信服务端与客户端学习 一、项目概述 本项目基于Qt框架实现了TCP服务端与客户端的基本通信,涵盖连接、消息收发、断开管理等功能,适合初学者系统学习Qt网络模块的实际用法。 二、项目结构 52/ 服务端:main.cpp、widget.cpp、widget.h5…

神马 M60S++ 238T矿机参数解析:高效SHA-256算法比拼

1. 算法与适用币种神马 M60S 238T采用SHA-256算法,适用于挖掘主流的加密货币,包括比特币(BTC)和比特币现金(BCH)。SHA-256(安全哈希算法256位)是一种广泛应用于比特币等加密货币挖矿…

[特殊字符] 深入理解操作系统核心特性:从并发到分布式,从单核到多核的全面解析

🚀 深入理解操作系统核心特性:从并发到分布式,从单核到多核的全面解析💡 前言:操作系统是计算机的灵魂,它就像一个优秀的管家,协调着硬件和软件之间的关系。今天,我们将深入探讨操作…

人工智能机器学习——聚类

一、无监督学习(Unsupervised Learning)机器学习的一种方法,没有给定事先标记过的训练示例,自动对输入的数据进行分类或分群。优点: 算法不受监督信息(偏见)的约束,可能考虑到新的信息不需要标签数据&#…

优化MySQL分区表备份流程详解

在大型数据驱动应用中,MySQL分区表是优化查询和维护历史的常见选择。但随之而来的数据备份问题却让许多开发者头疼:如何确保分散在不同分区的数据能完整、一致地被备份,并在需要时快速恢复?手动处理不仅繁琐,而且极易出…

用 Go + HTML 实现 OpenHarmony 投屏(hdckit-go + WebSocket + Canvas 实战)

本文带你用 Go HTML/WebSocket 从零实现一个 OpenHarmony 设备投屏 Demo:Go 侧用 hdckit-go 连接设备并抓取屏幕帧(UiDriver),通过 WebSocket 二进制实时推送到浏览器,前端用 Canvas 渲染,并根据设备分辨率…

运筹学——求解线性规划的单纯形法

单纯形法的原理 先来举个例子: 用单纯形法求解下面线性规划问题的最优解:注释:解的过程是反复迭代的过程,如果第一次迭代没有理解也没关系,再继续看第二次迭代,和第三次迭代,每次迭代的流程都是…

Python GUI 框架 -- DearPyGui 简易入门

DearPyGui 关于 DPG 是一个简单且功能强大的 Python 图形用户界面框架。 与其他Python图形用户界面库相比,DPG具有以下独特之处: GPU 渲染多线程高度可定制内置开发人员工具:主题检查、资源检查、运行时指标带有数百种小部件组合的 70 多…

gcloud cli 使用 impersonate模拟 服务帐号

什么是模拟服务帐号 众所周知, gcloud 登陆的方式有两种 使用个人帐号, 通常是1个邮箱地址使用一个service account 通常是1个 json key 文件 所谓模式服务帐号意思就是, 让操作人员用个人帐号登陆, 但是登陆后所有的操作都是基于…

idf--esp32的看门狗menuconfig

1.Interrupt Watchdog Timeout (ms):意思是中断看门狗,也就是专门监管中断响应时间的看门狗,如果某个中断服务程序超过了这个运行时间,就会导致程序重启。2.红框是任务看门狗的最大看门时间,超过时间就会警告&#xff…

git在Linux中的使用

git-Linux中的使用一、下载git二、https方式上传三、ssh秘钥方式上传一、下载git 版本信息 [rootrocky ~]# cat /etc/rocky-release Rocky Linux release 9.4 (Blue Onyx) [rootrocky ~]# cat /etc/rocky-release-upstream Derived from Red Hat Enterprise Linux 9.4 [rootro…

HMI(人机界面)

新晋码农一枚,小编定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!一、核心…

嵌入式解谜日志—多路I/O复用

多路 I/O复用(Multiplexed I/O):1.定义:系统提供的I/O事件通知机制2.应用:是一种 I/O 编程模型,用于在单线程中同时处理多个(阻塞) I/O 操作,避免因等待某个 I/O 操作完成…