Qt:QCustomPlot類介紹

QCustomPlot的核心類就是QCustomPlot類。這個類繼承自QWidget,因此可以像其他QWidget一樣使用,比如放入布局中。

QCustomPlot類基本結構

  • 一個QCustomPlot對象可以包含多個圖層(通過QCPLayer表示),通常使用默認圖層。

  • 它包含四個坐標軸(上、下、左、右),默認顯示左下兩個坐標軸(xAxis和yAxis,另外兩個坐標軸是xAxis2,和yAxis2)。坐標軸的類型是QCPAxis。

  • 可以在圖表中添加多個圖形(Plottables),比如QCPGraph(曲線圖)、QCPBars(柱狀圖)等。這些圖形都繼承自QCPAbstractPlottable。

  • 可以添加其他元素:標題(通過plotLayout()設置)、圖例(QCPLegend)、文本標簽(QCPItemText)、直線(QCPItemLine)等。

QCustomPlot圖層

QCustomPlot類管理著所有的圖層,它默認自帶了六個圖層:

  • 背景層:background

  • 網格層:grid

  • 繪圖層:main

  • 坐標軸層:axes

  • 圖例層:legend

  • overlay層:overlay

層的順序的不同,繪制的順序也不同,越在底下的層越早繪制,默認為繪圖層main。

每個QCustomPlot類默認包含一個繪圖區域QCPAxisRect,一個QCPAxisRect一般來說會有上軸xAxis2、下軸xAxis、左軸yAxis和右軸yAxis2四個軸。

QCustomPlot使用步驟:

  • 將QCustomPlot加入工程。通常你可以直接包含qcustomplot.h和qcustomplot.cpp文件。

  • 在UI設計器中,可以將一個QWidget提升為QCustomPlot,或者直接在代碼中創建。

  • 在代碼中,通過addGraph()添加一條曲線(返回一個QCPGraph指針),然后設置數據。

  • 設置坐標軸范圍、標簽等。

  • 如果需要實時更新,在定時器中更新數據并調用replot()。

示例代碼(部分)

#include "qcustomplot.h"// 創建一個QCustomPlot對象(假設已經有一個QWidget容器,比如在UI設計器中放置了一個QWidget,然后提升為QCustomPlot)
QCustomPlot *customPlot = new QCustomPlot(parent);// 添加一條曲線
QCPGraph *graph = customPlot->addGraph();
graph->setData(x, y); // x和y是QVector<double>類型的數據// 設置坐標軸標簽
customPlot->xAxis->setLabel("X");
customPlot->yAxis->setLabel("Y");// 設置坐標軸范圍,可以自動調整
customPlot->rescaleAxes();// 重繪
customPlot->replot();

實時繪圖需要定時器不斷更新數據,然后重繪。可以使用addData()方法追加數據點,避免每次更新全部數據點,提升性能。

交互功能:

  • 縮放:

customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
  • 圖例可點擊,然后連接信號:

customPlot->legend->setSelectableParts(QCPLegend::spItems); // 連接信號槽。
selectionChangedByUser

自定義繪圖元素:通過QCPAbstractItem派生類可以繪制各種自定義的圖形元素(如箭頭、文本等)。

多圖層:用于組合多種圖形,比如在一個圖表中既有曲線又有柱狀圖,且柱狀圖在曲線之上顯示。

QCustomPlot核心功能亮點??

??多圖層支持??

  • 獨立的圖層系統(QCPLayer),可分層繪制圖形元素(如曲線、文本、形狀)。

  • 圖層疊加順序可控,支持動態顯隱圖層。

??豐富的基礎繪圖類型??

  • ??曲線圖??:QCPGraph(折線、曲線、散點圖)

  • ??柱狀圖??:QCPBars(分組/堆疊柱狀圖)

  • ??統計圖??:QCPStatisticalBox(箱線圖)、QCPColorMap(熱力圖)

  • ??金融圖??:QCPFinancial(K 線圖)

  • ??極坐標圖??:QCPPolarGraph(雷達圖、極坐標曲線)

??軸系統與刻度??

  • 雙軸系統(X/Y軸),支持多軸共存(如左右Y軸、上下X軸)。
  • 自定義刻度生成器(QCPAxisTicker),支持對數軸、時間軸、文本標簽軸。
  • 軸范圍靈活控制:自動縮放、手動固定、拖拽平移。

??交互式操作??

  • ??平移/縮放??:支持鼠標拖拽平移、滾輪縮放(可限定方向)。

  • ??點選/框選??:通過?QCPSelectionRect?實現矩形區域選擇數據點。

  • ??圖例交互??:點擊圖例隱藏/顯示關聯曲線。

  • ??數據光標??:實時顯示數據點坐標的?QCPItemTracer

??樣式高度可定制??

  • 線條樣式:線寬、線型(實線/虛線)、顏色漸變。

  • 填充樣式:支持漸變填充、紋理貼圖。

  • 文本與字體:任意位置的文本標簽(QCPItemText)、字體屬性自定義。

  • 軸外觀:刻度長度、標簽旋轉、背景網格線密度。

QCustomPlot高級特性

實時數據刷新?

?通過?QCustomPlot::replot()?高效重繪圖表,適合動態數據流(如傳感器數據):

// 動態追加數據示例
QVector<double> x, y;
x << 1 << 2 << 3;
y << 5 << 2 << 7;
customPlot->graph(0)->setData(x, y);
customPlot->replot(); // 刷新顯示

?數據選擇與編輯?

?啟用?setInteractions?支持數據點選擇(單擊/框選):

customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);

導出功能?

?一鍵導出為矢量圖或位圖:

customPlot->savePdf("chart.pdf", 0, 0); // PDF 矢量圖
customPlot->savePng("chart.png", 800, 600); // PNG 位圖

??性能優化??

大容量數據處理(十萬級數據點)時啟用?setOpenGl(true)?加速渲染。

通過?setAntialiasedElements?按需啟用抗鋸齒以平衡性能與質量。

部分代碼

// 創建簡單曲線圖
QCustomPlot *plot = new QCustomPlot;
plot->addGraph(); // 添加曲線
plot->graph(0)->setData(xData, yData); // 填充數據// 坐標軸配置
plot->xAxis->setLabel("X軸");
plot->yAxis->setLabel("Y軸");
plot->xAxis->setRange(0, 10); // 固定范圍
plot->yAxis->setRange(-5, 15);// 交互設置
plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);// 實時刷新定時器
QTimer *timer = new QTimer;
QObject::connect(timer, &QTimer::timeout, [&](){addNewDataPoint();   // 更新數據plot->replot();
});
timer->start(50); // 20Hz刷新

適用場景??

  • 科學計算可視化(如 MATLAB 風格繪圖)

  • 工業監控實時曲線

  • 金融數據分析(K 線圖、趨勢線)

  • 嵌入式設備數據顯示(低資源占用)

  • 學術論文圖表生成(矢量輸出)

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

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

相關文章

Visual Studio 2022 上使用ffmpeg

目錄 1. 添加包含目錄 2. 添加庫目錄 3. 添加依賴項 4. 添加動態庫目錄 5. 測試 在解決方案中右擊項目名稱&#xff0c;彈出的窗口中選擇 "屬性"。 1. 添加包含目錄 "C/C" -> "常規" -> "附加包含目錄"中添加 ffmpeg中的…

Elasticsearch 線程池

Elasticsearch 線程池「每個線程池到底采用哪種實現策略」&#xff1a;Elasticsearch 線程池&#xff08;ThreadPool&#xff09;中 **所有內置線程池名稱的常量定義**。 每個字符串常量對應一個 **線程池的名字&#xff08;name&#xff09;**&#xff0c;也就是你在 Thread…

深入理解 Next.js API 路由:構建全棧應用的終極指南

Next.js 是一個強大的 React 框架&#xff0c;不僅支持服務端渲染&#xff08;SSR&#xff09;和靜態站點生成&#xff08;SSG&#xff09;&#xff0c;還提供了內置的 API 路由功能&#xff0c;使開發者能夠輕松構建全棧應用。傳統的全棧開發通常需要單獨搭建后端服務&#xf…

【6.1.2 漫畫分布式事務技術選型】

漫畫分布式事務技術選型 &#x1f3af; 學習目標&#xff1a;掌握架構師核心技能——分布式事務技術選型與一致性解決方案&#xff0c;構建高可靠的分布式系統 &#x1f3ad; 第一章&#xff1a;分布式事務模式對比 &#x1f914; 2PC vs 3PC vs TCC vs Saga 想象分布式事務就…

液冷智算數據中心崛起,AI算力聯動PC Farm與云智算開拓新藍海(二)

從算法革新到基礎設施升級&#xff0c;從行業滲透到地域布局&#xff0c;人工智能算力正以 “規模擴張 效率提升”雙輪驅動中國數字經濟轉型。中國智能算力規模將在 2025 年突破 1000 EFLOPS&#xff0c;2028 年達到 2781.9 EFLOPS&#xff0c;五年復合增長率 46.2%&#xff0…

《QtPy:Python與Qt的完美橋梁》

QtPy 是什么 在 Python 的廣袤編程宇宙中&#xff0c;當涉及到圖形用戶界面&#xff08;GUI&#xff09;開發&#xff0c;Qt 框架宛如一顆璀璨的明星&#xff0c;散發著獨特的魅力。而 QtPy&#xff0c;作為 Python 與 Qt 生態系統交互中的關鍵角色&#xff0c;更是為開發者們開…

ubuntu環境下調試 RT-Thread

調試 RT-Thread 下載源碼 github 搜索 RT-Thread 下載源碼 安裝 python scons 環境 你已經安裝了 kconfiglib&#xff0c;但 scons --menuconfig 仍然提示找不到它。這種情況通常是由于 Python 環境不一致 導致的&#xff1a;你在一個 Python 環境中安裝了 kconfiglib&#xff…

【數據結構初階】--順序表(二)

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

Java中的方法傳參機制

1. 概述Java中的方法傳參機制分為兩種&#xff1a;值傳遞&#xff08;Pass by Value&#xff09; 和 引用傳遞&#xff08;Pass by Reference&#xff09;。然而&#xff0c;Java中所有的參數傳遞都是值傳遞&#xff0c;只不過對于對象來說&#xff0c;傳遞的是對象的引用地址的…

C++——this關鍵字和new關鍵字

一、this 關鍵字1. 什么是 this&#xff1f;this 是 C 中的一個隱式指針&#xff0c;它指向當前對象&#xff08;即調用成員函數的對象&#xff09;&#xff0c;在成員函數內部使用&#xff0c;用于引用調用該函數的對象。每個類的非靜態成員函數內部都可以使用 this。使用 thi…

Python中類靜態方法:@classmethod/@staticmethod詳解和實戰示例

在 Python 中&#xff0c;類方法 (classmethod) 和靜態方法 (staticmethod) 是類作用域下的兩種特殊方法。它們使用裝飾器定義&#xff0c;并且與實例方法 (def func(self)) 的行為有所不同。1. 三種方法的對比概覽方法類型是否訪問實例 (self)是否訪問類 (cls)典型用途實例方法…

FastGPT革命:下一代語言模型的極速進化

本文深度解析FastGPT核心技術架構&#xff0c;涵蓋分布式推理、量化壓縮、硬件加速等前沿方案&#xff0c;包含完整落地實踐指南&#xff0c;助你掌握大模型高效部署的終極武器。引言&#xff1a;當大模型遭遇速度瓶頸2023年&#xff0c;ChatGPT引爆全球AI熱潮&#xff0c;但企…

Geant4 安裝---Ubuntu

安裝工具 C/C工具包 sudo apt install build-essentialCmake sudo apt install -y cmakeccmake sudo apt install -y cmake-curses-gui安裝Qt可視化工具(不需要可視化可以不安裝) sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator 安裝Ope…

Spring Boot中請求參數讀取方式

目錄 一、前言 二、六種參數讀取方式 1.RequestParam 2.PathVariable 3.RequestBody 4.RequestHeader 5.CookieValue 6.MatrixVariable 三、對比和搭配 1.適用方法類型及建議使用場景 2.建議使用的請求路徑注解 3. 多種參數同時使用 4.同一請求不同方案&#xff1f…

2025華為OD機試真題最新題庫 (B+C+D+E+2025A+2025B卷) + 在線OJ在線刷題使用(C++、Java、Python C語言 JS合集)(正在更新2025B卷,目前已收錄710道)

2025年&#xff0c;已經開始使用AB卷題庫&#xff0c;題目和往期一樣&#xff0c;舊題加新題的組合&#xff0c;有題目第一時間更新&#xff0c;大家可以跟著繼續學習&#xff0c;目前使用復用題較多&#xff0c;可在OJ上直接找到對應的AB卷學習&#xff0c;可以放心學習&#…

分析新舊因子相關性

計算一組新因子、并分析它們與已有因子間的相關性1. 導入庫和初始化環境功能代碼解析數據加載2. 定義新因子計算函數功能代碼解析因子 1&#xff1a;波動率過濾器&#xff08;filter_001_1&#xff09;因子 2&#xff1a;ATR 過濾器&#xff08;filter_001_2&#xff09;因子 3…

Unity Demo——3D平臺跳躍游戲筆記

今天是一個3D平臺跳躍游戲的筆記。我們按照以下分類來對這個項目的代碼進行學習&#xff1a;核心游戲系統 (Core Game Systems)核心游戲系統是IkunOdyssey項目的基礎&#xff0c;負責所有游戲對象&#xff08;如玩家、敵人、道具等&#xff09;的通用行為和物理交互。它通過實體…

【C語言】回調函數、轉移表、qsort 使用與基于qsort改造冒泡排序

文章目錄數組指針/指針數組函數指針函數指針數組函數指針數組用途(轉移表)回調函數qsort函數基于qsort改造冒泡排序源碼數組指針/指針數組 int arr1[5] { 1,2,3,4,5 };int (*p1)[5] &arr1; //p1是數組指針變量int* arr2[5] { 0 }; //arr2是指針數組指針數組是存放指…

vue3 uniapp 使用ref更新值后子組件沒有更新 ref reactive的區別?使用from from -item執行表單驗證一直提示沒有值

遇到這樣一個問題&#xff0c;我有個1個頁面A&#xff0c;一個from表單組件&#xff0c;一個form-item組件&#xff0c; 使用是這樣的&#xff0c;我在父組件A中使用 &#xff0c;執行表單驗證一直提示沒有值咱們先來講一講ref 和reactive的區別 ref 用來創建一個基本類型或單…

PyQt5布局管理(QBoxLayout(框布局))

QBoxLayout&#xff08;框布局&#xff09; 采用QBoxLayout類可以在水平和垂直方向上排列控件&#xff0c;QHBoxLayout和 QVBoxLayout類繼承自QBoxLayout類。 QHBoxLayout&#xff08;水平布局&#xff09; 采用QHBoxLayout類&#xff0c;按照從左到右的順序來添加控件。QHBoxL…