QCustomPlot 疊加對象(Overlay Items)

QCustomPlot 提供了一系列可以在圖表上疊加顯示的對象(items),這些對象不屬于數據本身,而是用于標注、輔助線等用途。以下是主要疊加對象的詳細說明和使用方法。

1. QCPItemStraightLine (無限直線)

特性

  • 無限延伸的直線

  • 常用于參考線、基準線

創建與設置

QCPItemStraightLine *line = new QCPItemStraightLine(customPlot);
line->point1->setCoords(0, 5);  // 線上第一個點
line->point2->setCoords(1, 5);  // 線上第二個點(確定方向)
line->setPen(QPen(Qt::red, 2, Qt::DashLine));

常用方法

  • setPen()?- 設置線條樣式

  • point1,?point2?- 直線的兩個定義點

2. QCPItemLine (有限線段)

特性

  • 兩點之間的有限長度線段

  • 可以添加箭頭

創建與設置

QCPItemLine *line = new QCPItemLine(customPlot);
line->start->setCoords(1, 1);  // 起點
line->end->setCoords(5, 3);    // 終點
line->setHead(QCPLineEnding::esSpikeArrow);  // 終點箭頭
line->setPen(QPen(Qt::blue, 2));

常用方法

  • setHead(),?setTail()?- 設置起點/終點箭頭樣式

  • setSelectedPen()?- 設置選中時的線條樣式

QCPItemStraightLine 與 QCPItemLine 的區別

幾何特性區別

特性QCPItemStraightLineQCPItemLine
線條類型無限延伸的直線兩點之間的有限線段
定義方式通過一個點和方向定義通過起點和終點定義
數學表示參數方程或斜截式兩點之間的線段
實際繪制范圍總是延伸到整個繪圖區域僅在兩點之間繪制

功能特性對比

功能QCPItemStraightLineQCPItemLine
箭頭支持? 不支持? 支持
長度限制? 無限? 有限
方向表示需要兩個點定義方向明確起點終點
適合場景參考線、基準線連接線、標注

坐標系統注意事項

兩者都使用相同的坐標系統,但行為不同:

  • QCPItemStraightLine

    // 當圖表縮放時,直線會自動延伸以適應新范圍
    line->point1->setType(QCPItemPosition::ptPlotCoords);  // 使用繪圖坐標
  • QCPItemLine

    // 線段長度固定,不會隨縮放改變
    line->start->setType(QCPItemPosition::ptPlotCoords);
    line->end->setType(QCPItemPosition::ptPlotCoords);

性能考慮

  • QCPItemStraightLine?通常性能稍好,因為它的幾何計算更簡單。

  • QCPItemLine?在有大量箭頭裝飾時可能會有額外開銷。

  • 兩者在常規使用中性能差異不明顯。

3. QCPItemText (文本標簽)

特性

  • 可放置在任意位置的文本

  • 支持旋轉和多種對齊方式

創建與設置

QCPItemText *text = new QCPItemText(customPlot);
text->position->setCoords(3, 4);  // 文本位置
text->setText("Important Point");
text->setFont(QFont("Arial", 12));
text->setColor(Qt::darkGreen);
text->setRotation(45);  // 旋轉45度
text->setTextAlignment(Qt::AlignCenter);

常用方法

  • setPadding()?- 設置文本內邊距

  • setPositionAlignment()?- 設置位置對齊方式

  • setBrush()?- 設置背景填充

4. QCPItemRect (矩形)

特性

  • 可設置邊框和填充的矩形

  • 常用于高亮顯示區域

創建與設置

QCPItemRect *rect = new QCPItemRect(customPlot);
rect->topLeft->setCoords(1, 6);
rect->bottomRight->setCoords(4, 3);
rect->setPen(QPen(Qt::black));
rect->setBrush(QBrush(QColor(255, 200, 200, 100)));  // 半透明填充

常用方法

  • setRadius()?- 設置圓角半徑

  • setSelectedBrush()?- 設置選中時的填充

5. QCPItemEllipse (橢圓)

特性

  • 可設置邊框和填充的橢圓

  • 實際上是基于矩形的內切橢圓

創建與設置

QCPItemEllipse *ellipse = new QCPItemEllipse(customPlot);
ellipse->topLeft->setCoords(2, 5);
ellipse->bottomRight->setCoords(5, 2);
ellipse->setPen(QPen(Qt::darkBlue));
ellipse->setBrush(QBrush(QColor(200, 200, 255, 50)));

6. QCPItemPixmap (位圖)

特性

  • 可以在圖表上顯示位圖

  • 支持縮放和保持寬高比

創建與設置

QCPItemPixmap *pixmap = new QCPItemPixmap(customPlot);
pixmap->topLeft->setCoords(3, 7);
pixmap->setPixmap(QPixmap(":/images/logo.png"));
pixmap->setScaled(true, Qt::KeepAspectRatio);

通用屬性和方法

所有疊加對象都繼承自 QCPAbstractItem,具有以下通用功能:

  1. 位置控制

    • 使用錨點(QCPItemPosition)定義位置

    • 支持絕對坐標或相對坐標(軸坐標)

  2. 可選擇性

    item->setSelectable(true);
    connect(customPlot, &QCustomPlot::itemClick, [](QCPAbstractItem *item, QMouseEvent *event) {qDebug() << "Item clicked:" << item;
    });
  3. 可見性控制

    item->setVisible(false);  // 隱藏項目
  4. 圖層控制

    item->setLayer("overlay");  // 放置到特定圖層

使用技巧

  1. 動態更新

    // 在重繪前更新項目位置
    connect(customPlot, &QCustomPlot::beforeReplot, [=](){textLabel->position->setCoords(customPlot->xAxis->range().center(), customPlot->yAxis->range().upper);
    });
  2. 批量操作

    // 隱藏所有項目
    foreach(QCPAbstractItem *item, customPlot->items()) {item->setVisible(false);
    }
  3. 交互示例

    // 創建可拖動的文本標簽
    QCPItemText *dragText = new QCPItemText(customPlot);
    dragText->setText("Drag me");
    dragText->position->setType(QCPItemPosition::ptPlotCoords);
    dragText->position->setCoords(5, 5);
    dragText->setSelectable(true);// 啟用拖動交互
    customPlot->setInteraction(QCP::iSelectItems, true);
    customPlot->setInteraction(QCP::iMoveItems, true);

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

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

相關文章

Flink源碼閱讀環境準備全攻略:搭建高效探索的基石

想要深入探索Flink的底層原理&#xff0c;搭建一套完整且適配的源碼閱讀環境是必經之路。這不僅能讓我們更清晰地剖析代碼邏輯&#xff0c;還能在調試過程中精準定位關鍵環節。接下來&#xff0c;結合有道云筆記內容&#xff0c;從開發工具安裝、源碼獲取導入到調試配置&#x…

Dify,FastGPT,RagFlow有啥區別,在智能問答方面有啥區別

Dify、FastGPT、RagFlow都是當前非常流行的低代碼AI應用開發平臺&#xff0c;它們都專注于讓用戶能夠快速構建AI應用&#xff0c;但在設計理念、功能特色和適用場景上有明顯區別。 讓我詳細對比一下這三個平臺&#xff1a; 1. 平臺定位對比 Dify 定位&#xff1a;全棧AI應用…

基站定位接口如何如何用PHP實現調用?

隨著“新基建”戰略的推進&#xff0c;我國移動通信基站數量快速增長。截至2024年底&#xff0c;全國基站總數已達1265萬個&#xff0c;其中5G基站超425萬個&#xff0c;構建起全球規模最大、技術領先的通信網絡。 在這一基礎上&#xff0c;基站查詢API通過整合三大運營商數據…

Day 4:Shell流程控制——從“直線思維“到“智能決策“的進化

目錄 一、if語句&#xff1a;你以為簡單其實暗藏殺機1. 基礎語法&#xff08;看似簡單卻容易踩坑&#xff09;2. 安全寫法規范&#xff08;企業級建議&#xff09; 二、條件測試的六大門派1. 文件測試&#xff08;運維最愛&#xff09;2. 字符串比較&#xff08;引號是靈魂&…

分布式訓練中的隨機種子策略:深入理解與實踐指南

分布式訓練中的隨機種子策略&#xff1a;深入理解與實踐指南 引言&#xff1a;一個容易被忽視的關鍵細節 在深度學習的分布式訓練中&#xff0c;你是否見過這樣的代碼&#xff1f; torch.manual_seed(process_seed) # PyTorch操作 random.seed(process_seed) # Pyth…

金山辦公發布WPS智慧教育平臺,發力教育AI意義何在?

鈦媒體消息&#xff0c;金山辦公發布面向教育用戶的 WPS 智慧教育平臺&#xff0c;面對著金山辦公的發力&#xff0c;我們該怎么分析呢&#xff1f; 首先&#xff0c;從市場拓展與用戶需求響應角度看&#xff0c;金山辦公此次推出WPS智慧教育平臺&#xff0c;直接瞄準了教育領…

無人機航電系統之語音通信技術篇

無人機航電系統的語音通信技術是確保無人機與地面控制站、其他無人機或相關人員之間實現高效、穩定語音交互的關鍵技術&#xff0c;在軍事偵察、應急救援、物流運輸、航拍測繪等眾多領域發揮著至關重要的作用。 一、技術原理 無人機航電系統的語音通信技術主要基于無線通信原理…

element plus 的樹形控件,如何根據后臺返回的節點key數組,獲取節點key對應的node節點

在使用 Element Plus 的 el-tree 組件時&#xff0c;如果后端返回的節點 key 數組中包含了部分選中的父級節點的 key&#xff0c;可能會導致該父級節點下的所有子節點也被默認選中。這是因為 el-tree 的默認行為是&#xff1a;如果一個父節點被選中&#xff0c;那么其所有子節點…

什么是Sentinel

什么是 Sentinel? 在分布式系統中,服務間的依賴關系錯綜復雜。一個服務的故障,很可能像多米諾骨牌一樣,迅速蔓延并導致整個系統崩潰,這就是我們常說的“雪崩效應”。為了避免這種災難性后果,我們需要一種強大的機制來保護我們的系統,而 Sentinel 正是為此而生。 Senti…

AWS 使用圖形化界面創建 EKS 集群(零基礎教程)

無需命令行&#xff01;通過 AWS 控制臺圖形化操作&#xff0c;輕松創建 Kubernetes 集群。 文章目錄 文章簡介 一、準備工作&#xff1a;登錄 AWS 控制臺 二、創建 EKS 集群&#xff08;控制面&#xff09; 1. 創建 EKS 集群 2. 設置集群基本信息 3. 配置網絡設置 三、添加…

[C#] Winform - 進程間通信(SendMessage篇)

一、發送端 // 窗體&#xff1a;發送端 public partial class SendForm : Form {public SendForm(){InitializeComponent();}// 按鈕&#xff1a;發送private void btnSend_Click(object sender, System.EventArgs e){IntPtr hwnd User32Helper.FindWindow(null, "接收端…

鋰電池保護板測試儀:守護電池安全的幕后保障

在電動汽車、儲能電站和便攜式電子設備中&#xff0c;鋰電池作為核心動力源&#xff0c;其能量密度與安全性始終是行業關注的焦點。鋰電池在過充、過放、短路等異常情況下可能引發起火甚至爆炸&#xff0c;而鋰電池保護板正是解決這一問題的關鍵組件。為確保保護板性能可靠&…

Qemu搭建RISC-V,運行opensbi+u-boot+img

?1.先下載一個Ubuntu鏡像 https://cdimage.ubuntu.com/releases/24.04/release/ 我這里下載的是這個RISC-V的 &#x1f31f;1.2.解壓鏡像 xz -d ubuntu-24.04.2-preinstalled-server-riscv64.img.xz ?2.準備RISC-V的QEMU 打開qemu官網https://www.qemu.org/&#xff0c…

【實戰手冊】銀河麒麟服務器系統進入單用戶模式修改密碼(root)指南

目錄 前言 一、銀河麒麟單用戶模式簡介 二、進入單用戶模式修改密碼 三、登錄驗證新密碼 結語 前言 在日常服務器運維工作中&#xff0c;忘記root密碼是系統管理員偶爾會遇到的問題。作為國產操作系統的優秀代表&#xff0c;銀河麒麟服務器系統提供了通過單用戶模式重置r…

偏微分方程通解求解2

題目 求下列方程的通解: { u x y = u x u y u ? 1 ; u x y = u x u y ; u x y = u x u y u u 2 + 1 ; \begin{cases} u_{xy} = u_x u_y u^{-1}; \\ u_{xy} = u_x u_y; \\ u_{xy} = \dfrac{u_x u_y u}{u^2 + 1}; \end{cases} ????????uxy?=ux?uy?u?1;uxy?=ux?…

用于算法性能預測的 GNN 框架

大家讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; 抽象。 數值黑盒優化中的自動算法性能預測通常依賴于問題特征&#xff0c;例如探索性景觀分析特征。這些特征通常用作機器學習模型的輸入&#xff0c;并以表格格式表示。然而&#xff0c;這種方法往往忽…

拯救海量數據:PostgreSQL分區表性能優化實戰手冊(附壓測對比)

1 分區表核心原理與生產痛點 物理存儲結構決定性能邊界 PostgreSQL分區表的本質是繼承表路由規則的邏輯封裝。當父表被查詢時&#xff0c;查詢優化器通過CHECK約束快速定位子表&#xff0c;其性能核心取決于&#xff1a; -- 關鍵系統視圖 SELECT relname, relkind, relpages …

【Wi-Fi天氣時鐘】網絡授時

文章目錄 1 網絡授時概述1.1 什么是網絡授時1.2 為什么要使用網絡授時2 API概述2.1 什么是API2.2 如何使用API3 淘寶時間API簡介4 網絡授時流程和AT指令5 網絡授時程序設計5.1 API返回信息解析5.2 RTC初始化5.3 必要的后續操作6 結語1 網絡授時概述 1.1 什么是網絡授時 首先我…

騰訊云IM即時通訊:開啟實時通信新時代

一、引言 在當今數字化浪潮席卷全球的時代&#xff0c;即時通訊已然成為互聯網世界中不可或缺的關鍵元素。無論是個人日常生活中的社交互動&#xff0c;還是企業運營里的高效協作&#xff0c;即時通訊都發揮著舉足輕重的作用&#xff0c;已然滲透到人們生活與工作的每一個角落…

js邏輯:【增量更新機制】

增量更新機制&#xff1a;在數據發生變化時&#xff0c;只對變化的部分進行更新的策略&#xff0c;而不是每次都重新處理全部數據&#xff0c;即&#xff1a;在數據發生變化時&#xff0c;只對變化的部分進行更新的策略&#xff0c;而不是每次都重新處理全部數據 watch: {base…