C++使用Qt Charts創建數據可視化圖表

Qt Charts 是一個強大的工具,用于創建直觀的數據可視化圖表。本文將通過一個具體的示例,展示如何使用 Qt Charts 創建一個包含多條數據序列、自定義坐標軸和隨機數據生成的圖表。

示例代碼解析

以下是一個完整的示例代碼,展示如何使用 Qt Charts 創建一個數據可視化圖表:

#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QRandomGenerator>using namespace QtCharts;int main(int argc, char* argv[])
{QApplication app(argc, argv);// 設置全局字體QFont font("Microsoft YaHei");font.setPointSize(10);QApplication::setFont(font);// 創建圖表QChart* chart = new QChart();chart->setTitle(QStringLiteral("數據可視化圖表"));// 創建數據序列QLineSeries* series0 = new QLineSeries();QLineSeries* series1 = new QLineSeries();series0->setName(QStringLiteral("數據序列1"));series1->setName(QStringLiteral("數據序列2"));// 添加數據序列到圖表chart->addSeries(series0);chart->addSeries(series1);// 設置圖表主題chart->setTheme(QChart::ChartThemeLight);// 創建坐標軸QValueAxis* axisX = new QValueAxis;axisX->setRange(1, 100);axisX->setTitleText(QStringLiteral("X軸標題"));axisX->setLabelFormat("%d %");axisX->setTickCount(3);axisX->setMinorTickCount(3);QValueAxis* axisY = new QValueAxis;axisY->setRange(0, 100);axisY->setTitleText(QStringLiteral("Y軸標題"));axisY->setLabelFormat("%d %");axisY->setTickCount(3);axisY->setMinorTickCount(3);// 將坐標軸附加到圖表和數據序列chart->addAxis(axisX, Qt::AlignBottom);chart->addAxis(axisY, Qt::AlignLeft);series0->attachAxis(axisX);series0->attachAxis(axisY);series1->attachAxis(axisX);series1->attachAxis(axisY);// 初始化數據qreal t = 0, intv = 1;for (int i = 1; i < 100; i++) {int randomInt = QRandomGenerator::global()->bounded(101);int randomInt2 = QRandomGenerator::global()->bounded(84);series0->append(t, randomInt2);series1->append(t, randomInt);t += intv;}// 創建圖表視圖QChartView* chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);// 顯示圖表chartView->resize(800, 600);chartView->show();return app.exec();
}

代碼詳解

1. 創建圖表

QChart* chart = new QChart();
chart->setTitle(QStringLiteral("數據可視化圖表"));
  • 使用 QChart 創建一個圖表對象。
  • 設置圖表標題。

2. 創建數據序列

QLineSeries* series0 = new QLineSeries();
QLineSeries* series1 = new QLineSeries();
series0->setName(QStringLiteral("數據序列1"));
series1->setName(QStringLiteral("數據序列2"));
  • 使用 QLineSeries 創建兩個數據序列。
  • 通過 setName 方法為每個序列設置名稱,這些名稱會顯示在圖例中。

3. 添加數據序列到圖表

chart->addSeries(series0);
chart->addSeries(series1);
  • 將創建的數據序列添加到圖表中。

4. 設置圖表主題

chart->setTheme(QChart::ChartThemeLight);
  • 設置圖表的主題為淺色主題。

5. 創建坐標軸

QValueAxis* axisX = new QValueAxis;
axisX->setRange(1, 100);
axisX->setTitleText(QStringLiteral("X軸標題"));
axisX->setLabelFormat("%d %");
axisX->setTickCount(3);
axisX->setMinorTickCount(3);QValueAxis* axisY = new QValueAxis;
axisY->setRange(0, 100);
axisY->setTitleText(QStringLiteral("Y軸標題"));
axisY->setLabelFormat("%d %");
axisY->setTickCount(3);
axisY->setMinorTickCount(3);
  • 使用 QValueAxis 創建 X 軸和 Y 軸。
  • 設置坐標軸的范圍、標題、標簽格式、刻度數和次刻度數。

6. 將坐標軸附加到圖表和數據序列

chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
series0->attachAxis(axisX);
series0->attachAxis(axisY);
series1->attachAxis(axisX);
series1->attachAxis(axisY);
  • 將坐標軸附加到圖表,并將數據序列與坐標軸關聯。

7. 初始化數據

qreal t = 0, intv = 1;
for (int i = 1; i < 100; i++) {int randomInt = QRandomGenerator::global()->bounded(101);int randomInt2 = QRandomGenerator::global()->bounded(84);series0->append(t, randomInt2);series1->append(t, randomInt);t += intv;
}
  • 使用 QRandomGenerator 生成隨機數據。
  • 將隨機數據添加到數據序列中。

8. 創建圖表視圖并顯示

QChartView* chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);chartView->resize(800, 600);
chartView->show();
  • 使用 QChartView 創建圖表視圖,并啟用抗鋸齒渲染。
  • 設置圖表視圖的大小并顯示。

總結

通過上述代碼,展示了如何使用 Qt Charts 創建一個數據可視化圖表。這個示例包括創建圖表、添加數據序列、配置坐標軸、生成隨機數據以及顯示圖表。可以根據實際需求進一步自定義圖表的外觀和行為。

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

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

相關文章

TCP/IP五層協議

目錄 1. 五層模型結構 2. 各層核心功能與協議 (1) 應用層&#xff08;Application Layer&#xff09; (2) 傳輸層&#xff08;Transport Layer&#xff09; (3) 網絡層&#xff08;Network Layer&#xff09; (4) 數據鏈路層&#xff08;Data Link Layer&#xff09; (5…

【最新版】金媒婚戀系統v10.5最新穩定開源+原生前端小程序 PC端+安裝教程

一.系統簡介 1. 紅娘服務 紅娘服務模塊是該系統的一大特色。專業紅娘會通過分析用戶的個人資料和偏好&#xff0c; 為用戶提供精準的配對建議和個性化服務。用戶可以預約紅娘服務&#xff0c;通過紅娘的介入&#xff0c;提升配對成功率。 2. 相親活動 相親活動模塊用于組織和管…

吳恩達深度學習復盤(5)神經網絡的前向傳播TesorFlow與NumPy實現比對

數據結構差別 NumPy 和 TensorFlow 在數據表示上的差異展開&#xff0c;結合神經網絡實踐中的常見問題進行說明。以下是詳細解析&#xff1a; 一、簡介 數據表示的歷史背景 NumPy 是 Python 科學計算的基礎庫&#xff0c;早期設計為處理多維數組TensorFlow 由 Google Brain 團…

多元高斯分布函數

1、 n n n元向量 假設 n n n元隨機變量 X X X X [ X 1 , X 2 , ? , X i , ? , X n ] T μ [ μ 1 , μ 2 , ? , μ i , ? , μ n ] T σ [ σ 1 , σ 2 , ? , σ i , ? , σ n ] T X i ~ N ( μ i , σ i 2 ) \begin{split} X&[X_1,X_2,\cdots,X_i,\cdots ,X_n…

洞察 Linux 進程管理

一、進程和線程的概念 1.進程 &#xff08;1&#xff09;概念 進程是程序在操作系統中的一次執行過程&#xff0c;是系統進行資源分配和調度的基本單位。進程是程序的執行實例&#xff0c;擁有獨立的資源&#xff08;如內存、文件描述符等&#xff09;。每個進程在創建時會被…

PyTorch 實現圖像版多頭注意力(Multi-Head Attention)和自注意力(Self-Attention)

本文提供一個適用于圖像輸入的多頭注意力機制&#xff08;Multi-Head Attention&#xff09;PyTorch 實現&#xff0c;適用于 ViT、MAE 等視覺 Transformer 中的注意力計算。 模塊說明 輸入支持圖像格式 (B, C, H, W)內部轉換為序列 (B, N, C)&#xff0c;其中 N H * W多頭注…

每日一題(小白)字符串娛樂篇16

分析題意可以了解到本題要求在一串字符串中找到所有組合起來排序遞增的字符串。我們可以默認所有字符在字符串中的上升序列是1&#xff0c;從第一個字符開始找&#xff0c;如果后面的字符大于前面的字符就說明這是一個上序列那么后面字符所在的數組加一&#xff0c;如果連接不上…

Ubuntu 22 Linux上部署DeepSeek R1保姆式操作詳解(Xinference方式)

一、安裝步驟 1.基礎環境安裝 安裝顯卡驅動、cuda&#xff0c;根據自己硬件情況查找相應編號&#xff0c;本篇不介紹這部分內容&#xff0c;只給出參考指令&#xff0c;詳情請讀者自行查閱互聯網其它參考資料。 sudo apt install nvidia-utils-565-server sudo apt install…

Immutable.js 完全指南:不可變數據的藝術與實踐

引言 在現代前端開發中&#xff0c;狀態管理是一個核心挑戰。隨著應用復雜度增加&#xff0c;如何高效、安全地管理應用狀態變得至關重要。Immutable.js 是 Facebook 推出的一個 JavaScript 庫&#xff0c;它提供了持久化不可變數據結構&#xff0c;可以幫助開發者更好地管理應…

字符串數據類型的基本運算

任務描述 本關任務&#xff1a;從后臺輸入任意三個字符串&#xff0c;求最大的字符串。 相關知識 字符串本身是存放在一塊連續的內存空間中&#xff0c;并以’\0’作為字符串的結束標記。 字符指針變量本身是一個變量&#xff0c;用于存放字符串的第 1 個字符的地址。 字符數…

Ubuntu 22.04 一鍵部署openManus

openManus 前言 OpenManus-RL,這是一個專注于基于強化學習(RL,例如 GRPO)的方法來優化大語言模型(LLM)智能體的開源項目,由來自UIUC 和 OpenManus 的研究人員合作開發。 前提要求 安裝deepseek docker方式安裝 ,windows 方式安裝,Linux安裝方式

PDF 轉圖片,一行代碼搞定!批量支持已上線!

大家好&#xff0c;我是程序員晚楓。今天我要給大家帶來一個超實用的功能——popdf 現在支持 PDF 轉圖片了&#xff0c;而且還能批量操作&#xff01;是不是很激動&#xff1f;別急&#xff0c;我來手把手教你玩轉這個功能。 1. 一行代碼搞定單文件轉換 popdf 的核心就是簡單暴…

《比特城的機密郵件:加密、簽名與防篡改的守護之戰》

點擊下面圖片帶您領略全新的嵌入式學習路線 &#x1f525;爆款熱榜 88萬閱讀 1.6萬收藏 第一章&#xff1a;風暴前的密令 比特城的議會大廳內&#xff0c;首席長老艾德文握著一卷足有半人高的羊皮紙&#xff0c;眉頭緊鎖。紙上是即將頒布的《新紀元法典》——這份文件不僅內…

8.用戶管理專欄主頁面開發

用戶管理專欄主頁面開發 寫在前面用戶權限控制用戶列表接口設計主頁面開發前端account/Index.vuelangs/zh.jsstore.js 后端Paginator概述基本用法代碼示例屬性與方法 urls.pyviews.py 運行效果 總結 歡迎加入Gerapy二次開發教程專欄&#xff01; 本專欄專為新手開發者精心策劃了…

http://noi.openjudge.cn/_2.5基本算法之搜索_1804:小游戲

文章目錄 題目深搜代碼寬搜代碼深搜數據演示圖總結 題目 1804:小游戲 總時間限制: 1000ms 內存限制: 65536kB 描述 一天早上&#xff0c;你起床的時候想&#xff1a;“我編程序這么牛&#xff0c;為什么不能靠這個賺點小錢呢&#xff1f;”因此你決定編寫一個小游戲。 游戲在一…

發生梯度消失, 梯度爆炸問題的原因,怎么解決?

目錄 一、梯度消失的原因 二、梯度爆炸的原因 三、共同的結構性原因 四、解決辦法 五、補充知識 一、梯度消失的原因 梯度消失指的是在反向傳播過程中&#xff0c;梯度隨著層數的增加指數級減小&#xff08;趨近于0&#xff09;&#xff0c;導致淺層網絡的權重幾乎無法更新…

【USRP】srsRAN 開源 4G 軟件無線電套件

srsRAN 是SRS開發的開源 4G 軟件無線電套件。 srsRAN套件包括&#xff1a; srsUE - 具有原型 5G 功能的全棧 SDR 4G UE 應用程序srsENB - 全棧 SDR 4G eNodeB 應用程序srsEPC——具有 MME、HSS 和 S/P-GW 的輕量級 4G 核心網絡實現 安裝系統 Ubuntu 20.04 USRP B210 sudo …

ChatGPT 4:解鎖AI文案、繪畫與視頻創作新紀元

文章目錄 一、ChatGPT 4的技術革新二、AI文案創作&#xff1a;精準生成與個性化定制三、AI繪畫藝術&#xff1a;從文字到圖像的神奇轉化四、AI視頻制作&#xff1a;自動化剪輯與創意實現五、知識庫與ChatGPT 4的深度融合六、全新的變革和機遇《ChatGPT 4 應用詳解&#xff1a;A…

在js中數組相關用法講解

數組 uniqueArray 簡單數組去重 /*** 簡單數組去重* param arr* returns*/ export const uniqueArray <T>(arr: T[]) > [...new Set(arr)];const arr1 [1,1,1,1 2, 3];uniqueArray(arr); // [1,2,3]uniqueArrayByKey 根據 key 數組去重 /*** 根據key數組去重* …

RT-Thread ulog 日志組件深度分析

一、ulog 組件核心功能解析 輕量化與實時性 ? 資源占用&#xff1a;ulog 核心代碼僅需 ROM<1KB&#xff0c;RAM<0.2KB&#xff0c;支持在資源受限的MCU&#xff08;如STM32F103&#xff09;中運行。 ? 異步/同步模式&#xff1a;默認采用異步環形緩沖區&#xff08;rt_…