Qt 統計圖編程

學習目標:Qt 折線圖,柱形圖和扇形統計圖編程

學習基礎

Qt QChart 曲線圖表操作-CSDN博客

學習內容

Qt中繪制三種常見的圖表非常方便, 主要步驟如下:

1. 折線圖:?

- 使用QLineSeries定義折線數據,添加多個坐標點?
- 使用QValueAxis創建X軸和Y軸
- 將系列和坐標軸添加到QChart中
- 設置屬性如標題、線條樣式等
- 添加到QChartView顯示

2. 柱形圖:

- 使用QBarSet定義每個組的柱數據 ?
- 使用QBarSeries添加多個QBarSet組成總系列
- 同樣創建分類軸和值軸
- 可以采用堆積方式顯示
- 其他設置與折線圖類似

3. 餅圖:

- 使用QPieSeries定義餅圖序列 ?
- 通過QPieSlice添加多個扇形部分
- 設置每個扇形的名稱、百分比和顏色
- 添加到QChart并使用QChartView顯示
- 可以手動修改扇形的開始和長度Angle

Qt Chart提供了很友好的接口實現各種常見圖表。開發者只需熟悉這幾個關鍵類,就可以方便繪制不同需求的圖表。它使用戶界面的數據可視化開發工作效率得到很大提升。

話不多說直接開始上代碼

項目效果

?核心代碼

折線圖

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//創建圖表QChart* chart =new QChart;chart->setTitle("全球各國軍費增長折線圖"); // 設置標題名稱ui->graphicsView->setChart(chart);//設置坐標QValueAxis* ax =new QValueAxis;ax->setTitleText("年份");ax->setRange(2018,2022);ax->setTickCount(5); //設置刻度 即年份總個數ax->setLineVisible(true); //網格ax->setGridLineVisible(true);//網格線均可見QValueAxis *ay =new QValueAxis;ay->setTitleText("軍費(萬億)");ay->setRange(3000,10000);ay->setTickCount(5);ay->setLineVisible(true);ay->setGridLineVisible(true);//繪畫折線QLineSeries* series =new QLineSeries;series->setName("中國");series->setColor(Qt::red);// 添加數據點到序列series->append(2018,6500);series->append(2019,4900);series->append(2020,8000);series->append(2021,9000);series->append(2022,9500);QLineSeries* series2 =new QLineSeries;series2->setName("俄羅斯");series2->setColor(Qt::green);// 添加數據點到序列series2->append(2018,4500);series2->append(2019,4900);series2->append(2020,9000);series2->append(2021,10000);series2->append(2022,10000);//加入到圖表chart->addSeries(series);chart->setAxisX(ax,series);chart->setAxisY(ay,series);chart->addSeries(series2);chart->setAxisX(ax,series2);chart->setAxisY(ay,series2);
}Widget::~Widget()
{delete ui;
}

柱形圖

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;//創建圖表QChart * chart =new QChart;chart->setTitle("某某學校實驗班高考成績分數");//創建條形對象數據QBarSet* bar =new QBarSet("bar");*bar<<560<<710<<599<<688<<701;//繪畫條形QStackedBarSeries* series =new QStackedBarSeries;series->append(bar);QStringList strlist={"小王","小李","小吳","小張","小趙"};//創建x y軸 通過QBarCategoryAxis類將類型添加到圖表的軸QBarCategoryAxis* ax =new QBarCategoryAxis;ax->setTitleText("考生姓名");ax->append(strlist);QValueAxis* ay =new QValueAxis;ay->setTitleText("高考總分階梯");ay->setRange(0,750);chart->addSeries(series);chart->addAxis(ax,Qt::AlignBottom);chart->addAxis(ay,Qt::AlignLeft);series->attachAxis(ax);series->attachAxis(ay);chart->legend()->setVisible(false); // 設置繪圖區與圖表邊界chart->legend()->setAlignment(Qt::AlignBottom);QChartView* view = new QChartView;view->setChart(chart);w.setWindowTitle("高考成績--柱狀圖表展示");w.setCentralWidget(view);w.resize(800,500);w.show();return a.exec();
}

餅形圖

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;//創建餅狀圖繪畫對象QPieSeries* series =new QPieSeries;// 占用比例series->append("70分以下:30%",30);series->append("70分-85分:40%",40);series->append("86分-99分:25%",25);series->append("100分:5%",5);series->setLabelsVisible(true);// 設置標簽屬性,可見QPieSlice* s1=series->slices().at(0);QPieSlice* s2=series->slices().at(1);QPieSlice* s3=series->slices().at(2);QPieSlice* s4=series->slices().at(3);s1->setColor(Qt::red);s2->setColor(Qt::green);s3->setColor(Qt::yellow);s4->setColor(Qt::black);//創建圖表QChart* chart =new QChart;chart->addSeries(series);chart->setTitle("餅圖形狀--班級考試百分制整數比例");//創建圖表視圖QChartView* view =new QChartView;view->setChart(chart);w.setCentralWidget(view);w.resize(600,600);w.show();return a.exec();
}

總結

總的來說,通過這個示例可以很清楚地了解QT中的圖表繪制過程:

1. 首先創建相應的圖表對象,如QLineChart、QBarChart、QPieChart等。設置標題、屬性等。

2. 定義數據模型,如QLineSeries、QBarSeries、QPieSeries等,用于存儲圖表的數據點。?

3. 添加具體的數據到系列對象中,如坐標點、分類數據、占比等。

4. 創建坐標軸對象QValueAxis和QCategoryAxis,配置名稱、范圍等。?

5. 將系列與坐標軸添加到圖表對象中,實現數據與軸的關聯。

6. 創建QChartView視圖對象,設置圖表給視圖即可渲染展示。

7. 另外可以對分量設置個性化屬性,如顏色、標簽等。

通過極少量API調用,就可以繪制出豐富的線性圖、柱狀圖、餅圖等不同圖表類型。這說明QT Chart的設計理念非常清晰、使用也很簡單易上手。開發人員可以根據實際需求,通過組合這些基礎類快速實現各種數據可視化工作。這無疑大大提升了開發效率。

最后附上源代碼鏈接
對您有幫助的話,幫忙點個star

Qt demo: 學習qt過程 (gitee.com)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45372.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45372.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45372.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dockerfile配置和yml配置

dockerfile docker build 使用dockerfile自動構建鏡像文件 FROM python:3.9WORKDIR /appCOPY requirements.txt. RUN pip install -r requirements.txtCOPY..CMD ["python", "main.py"]docker build dockerifle自動構建拉取python3.9鏡像&#xff0c;并執…

拷貝文件的一些操作

利用fputc 、fgetc實現文件的拷貝 int main(int argc, const char *argv[]) {FILE* rfpfopen(argv[1],"r");FILE* wfpfopen(argv[2],"w");if(rfpNULL || wfpNULL){perror("fopen");return 1;}while(1){char resfgetc(rfp);if(feof(rfp)1){break;…

PointCloudLib LocalMaximum_DeleteMaxPoint C++版本

測試效果 簡介 在點云庫&#xff08;Point Cloud Library&#xff0c;PCL&#xff09;中&#xff0c;處理點云數據時&#xff0c;經常需要去除局部最大點&#xff08;Local Maximum&#xff09;&#xff0c;這通常用于去除噪聲、提取特定形狀的特征或者簡化點云數據。局部最大…

[米聯客-安路飛龍DR1-FPSOC] FPGA基礎篇連載-14 SPI MASET發送程序設計

軟件版本&#xff1a;Anlogic -TD5.9.1-DR1_ES1.1 操作系統&#xff1a;WIN10 64bit 硬件平臺&#xff1a;適用安路(Anlogic)FPGA 實驗平臺&#xff1a;米聯客-MLK-L1-CZ06-DR1M90G開發板 板卡獲取平臺&#xff1a;https://milianke.tmall.com/ 登錄“米聯客”FPGA社區 ht…

數據庫管理-第220期 Oracle的高可用-03(20240715)

數據庫管理220期 2024-07-15 數據庫管理-第220期 Oracle的高可用-03&#xff08;20240715&#xff09;1 AC/TAC2 配置Service3 用戶權限4 端口開放總結 數據庫管理-第220期 Oracle的高可用-03&#xff08;20240715&#xff09; 作者&#xff1a;胖頭魚的魚缸&#xff08;尹海文…

Modbus - 筆記

1 Modbus Poll/Slave 模擬器使用教程 Modbus Poll/Slave 模擬器使用教程_modbus poll 使用教程-CSDN博客 https://item.jd.com/67488830087.html

Node.js 爬蟲開發實戰:構建一個高效、優雅的網絡數據抓取器

在大數據時代&#xff0c;從網頁上自動抓取數據的需求日益增長。Node.js&#xff0c;以其異步非阻塞I/O模型&#xff0c;成為了構建高性能網絡爬蟲的理想選擇。本文將引導你如何使用Node.js&#xff0c;結合axios和cheerio兩個流行庫&#xff0c;創建一個能夠從目標網站抓取信息…

51單片機10(蜂鳴器介紹)

一、蜂鳴器介紹&#xff1a; 1、蜂鳴器是一種一體化結構的電子訊響器&#xff0c;采用直流電壓供電&#xff0c;廣泛應用于電子產品中作為發聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器。 &#xff08;1&#xff09;壓電式蜂鳴器&#xff0c;它主要由多諧的一個增脹器…

【學習筆記】無人機(UAV)在3GPP系統中的增強支持(八)-通過無人機進行無線接入

引言 本文是3GPP TR 22.829 V17.1.0技術報告&#xff0c;專注于無人機&#xff08;UAV&#xff09;在3GPP系統中的增強支持。文章提出了多個無人機應用場景&#xff0c;分析了相應的能力要求&#xff0c;并建議了新的服務級別要求和關鍵性能指標&#xff08;KPIs&#xff09;。…

電腦出現錯誤——找不到msvcp140.dll無法繼續執行代碼,有效解決錯誤dll文件

msvcp140.dll是一個屬于 Microsoft Visual C Redistributable for Visual Studio 2015 的 DLL 文件。這個文件是許多Windows應用程序&#xff08;尤其是使用 C 開發的程序&#xff09;所必需的&#xff0c;因為它包含了標準 C 庫的函數實現&#xff0c;用于處理數學運算、數據轉…

【React Hooks原理 - useRef】

概述 在Function Component項目中當我們需要操作dom的時候&#xff0c;第一時間想到的就是使用useRef這個Hook來綁定dom。但是這個僅僅是使用這個Hook而已&#xff0c;為了更好的學習React Hooks內部實現原理&#xff0c;知其所以然。所以本文根據源碼從useRef的基礎使用場景一…

使用shell腳本打印99乘法表

一、簡介 前一段時間在舊電腦上安裝 antiX 23.1 操作系統&#xff0c;遇到一些問題需要使用shell腳本解決問題&#xff0c;所以專門學習了幾天&#xff0c;打印99乘法表是其中的一個練習作業。 二、學習Linux可行的幾種方式 虛擬機安裝Linux進行學習直接雙系統安裝在實體電腦…

Ubuntu新系統的使用

1.安裝顯卡驅動 直接到軟件與更新里面&#xff0c;就是一個A字圖標的那個軟件打開&#xff0c;到附加驅動里選擇。要選擇“server driver”的&#xff0c;選擇后確認即可。 然后輸入&#xff1a;nvidia-sim查看 別的方法太復雜&#xff0c;這個方法我親測了兩臺電腦&#xff…

kubebuilder入門

1. 安裝kubebuilder brew install kubebuilder 2. 需求描述 開發一個zk operator。 cr定義為ZooKeeperCluster 3. 開發過程 3.1 創建一個空的文件夾zk-operator mkdir zk-operator 3.2 進入該文件夾 cd zk-operator 3.3 執行初始化 kubebuilder init --domain my.doma…

MWA(Modern Web App)初學那些事-2-Basic HTML CSS

初學MWA(Modern Web App&#xff09;那些事-2-Basic HTML & CSS 目錄 初學MWA(Modern Web App&#xff09;那些事-2-Basic HTML & CSS前言一、本節學習目標二、HTML基礎內容2.1關鍵元素2.4 Scripts 三、CSS 基礎內容3.1 級聯樣式表-用于設置網頁樣式和布局3.2 CSS規則語…

springcloud使用微服務的搭建

微服務的搭建 1.配置對應信息 Springboot 、springcloud、springcloud alibaba對應關系 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 2.pom.xml的配置 2.1 總項目pom.xml引入依賴 <parent><groupId>org.sprin…

阿里通義音頻生成大模型 FunAudioLLM 開源

簡介 近年來&#xff0c;人工智能&#xff08;AI&#xff09;技術的進步極大地改變了人類與機器的互動方式&#xff0c;特別是在語音處理領域。阿里巴巴通義實驗室最近開源了一個名為FunAudioLLM的語音大模型項目&#xff0c;旨在促進人類與大型語言模型&#xff08;LLMs&…

vue3在 setup 中訪問路由和當前路由

報錯信息&#xff1a; Cannot read properties of undefined (reading $router) 原因&#xff1a; 因為我們在 setup 里面沒有訪問 this&#xff0c;所以我們不能直接訪問 this.$router 或 this.$route。 解決方案&#xff1a; 作為替代&#xff0c;我們使用 useRouter 和…

Oracle字符集修改

提示 Oracle數據庫默認的字符集編碼為US7ASCII&#xff0c;這個編碼是不支持中文的&#xff0c;如果想要在數據庫存儲中文&#xff0c;就需要修改編碼為ZHS16GBK或UTF-8 編碼和字符集是一個意思&#xff0c;只是叫法不一樣而已 前置條件 修改字符集的前提是知道我們現在用的是什…

跳妹兒學編程之ScratchJr(9):程序控制積木篇—短跑比賽

跳妹兒學編程之ScratchJr(7)&#xff1a;動作積木篇—爸爸去散步 跳妹兒學編程之ScratchJr(8)&#xff1a;外觀積木篇—捉迷藏 跳妹兒學編程之ScratchJr(9)&#xff1a;程序控制積木篇—短跑比賽 引言 在之前的一篇文章中&#xff0c;我們了解了ScratchJr的動作積木和外觀積…