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
英文地址,請注明出處:http://en.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 操作完成…