QCustomPlot使用教程

一、QCustomPlot介紹

QCustomPlot是用於繪製圖表的Qt C++繪圖庫。它提供了多種基本繪圖元素,如曲線、數據點、坐標軸、網格、標籤等,並支持實時數據可視化。它還支持豐富的交互,如縮放、平移、選擇區域、響應鼠標事件等。

QCustomPlot的安裝也很容易,在Qt中實現安裝只需要兩步:首先,下載並解壓縮源代碼包;其次,在Qt項目中包含所需的頭文件和鏈接到共享庫。

二、繪製曲線

QCustomPlot可以很容易地繪製多個曲線。以下示例顯示如何繪製兩個簡單的曲線。

QCustomPlot customPlot;
customPlot.addGraph();
customPlot.graph(0)->setData(x, y); // x和y是數據集
customPlot.addGraph();
customPlot.graph(1)->setData(x, z); // z是第二組數據集
customPlot.replot();

要為曲線設置樣式和繪製屬性,可以使用QPen。例如,以下代碼將設置第一條曲線的顏色為紅色:

customPlot.graph(0)->setPen(QPen(Qt::red));

三、坐標軸和標籤

QCustomPlot提供了兩個主坐標軸和兩個次坐標軸。以下代碼創建了一個簡單的圖形,並在其上方添加了一個標題和標題:

QCustomPlot customPlot;
customPlot.plotLayout()->insertRow(0); // 添加一個行以放置標題
customPlot.plotLayout()->addElement(0, 0, new QCPTextElement(customPlot,
    "My Plot Title", QFont("sans", 12, QFont::Bold)));
customPlot.xAxis->setLabel("x Axis Label");
customPlot.yAxis->setLabel("y Axis Label");
customPlot.addGraph();
//設置x,y坐標軸範圍
customPlot.xAxis->setRange(0, 10);
customPlot.yAxis->setRange(0, 1);
customPlot.graph(0)->setData(x, y);
customPlot.replot();

四、實時數據顯示

QCustomPlot支持實時數據可視化,即當新數據點可用時,可以將它們添加到已繪製的曲線上。以下示例顯示了如何使用QTimer添加新數據點。

// 創建定時器
QTimer dataTimer;
// 連接定時器的timeout()信號到槽函數,每個周期發射一次timeout()信號
connect(&dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot()));
dataTimer.start(0); // 參數為0可儘可能快地執行定時器任務

數據槽函數(realtimeDataSlot())將生成新數據點並將它們添加到圖形中:

void MainWindow::realtimeDataSlot()
{
    // 計算新的數據點
    double key = QDateTime::currentDateTime().toMSecsSinceEpoch()/1000.0;
    static double lastPointKey = 0;
    if (key-lastPointKey > 0.01) // 為了使數據點之間不相互重疊
    {
        // 生成新的x,y數據
        double value0 = qSin(key*1.6)*qCos(key*1.4)*10 + qSin(key*0.6)*5;
        double value1 = qSin(key*1.2)*qCos(key*0.9)*10 + qSin(key*0.2)*7.5;
        // 將新數據點添加到曲線中
        ui->customPlot->graph(0)->addData(key, value0);
        ui->customPlot->graph(1)->addData(key, value1);
        // 移動坐標軸範圍(使其保持滑動窗口效果)
        ui->customPlot->xAxis->setRange(key, 8, Qt::AlignRight);
        ui->customPlot->replot();
        lastPointKey = key;
    }
}

五、交互和事件

QCustomPlot提供了許多交互功能,例如放大、縮小、選擇區域、平移等,可以通過setInteractions函數設置。例如,以下代碼顯示如何啟用縮放和平移功能:

customPlot.setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);

可以利用事件處理函數綁定一些響應鼠標事件的操作。例如,以下代碼顯示如何按下鼠標左鍵縮放y軸:

// 聲明一個double值,記錄鼠標按下時y坐標軸的範圍下限
double yMin = 0;
// 重寫mousePress事件,該事件在鼠標按下時調用
void MainWindow::mousePress(QMouseEvent *event)
{
    // 如果事件是鼠標左鍵按下
    if (event->button() == Qt::LeftButton)
    {
        // 記錄當前y坐標軸範圍下限
        yMin = ui->customPlot->yAxis->range().lower;
    }
}
// 重寫mouseMove事件,該事件在鼠標移動時調用
void MainWindow::mouseMove(QMouseEvent *event)
{
    // 如果事件是鼠標左鍵拖動
    if (event->buttons() == Qt::LeftButton)
    {
        // 計算當前縮放因子
        double zoomFactor = 1.0 + (event->pos().y() - event->lastPos().y()) / 100.0;
        // 計算當前的y坐標軸範圍
        QCPRange newRange(yMin*zoomFactor, ui->customPlot->yAxis->range().upper*zoomFactor);
        // 將新的範圍設置給y坐標軸
        ui->customPlot->yAxis->setRange(newRange);
        ui->customPlot->replot();
    }
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/295391.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 17:15
下一篇 2024-12-27 12:56

相關推薦

  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變量類型,而是在變量第一次賦值時自動識別該變量的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬盤。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows服務器上的日誌,並將其發送到遠程服務器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • Python畫K線教程

    本教程將從以下幾個方面詳細介紹Python畫K線的方法及技巧,包括數據處理、圖表繪製、基本設置等等。 一、數據處理 1、獲取數據 在Python中可以使用Pandas庫獲取K線數據…

    編程 2025-04-28
  • Python語言程序設計教程PDF趙璐百度網盤介紹

    Python語言程序設計教程PDF趙璐百度網盤是一本介紹Python語言編程的入門教材,本文將從以下幾個方面對其進行詳細闡述。 一、Python語言的特點 Python語言屬於解釋…

    編程 2025-04-28

發表回復

登錄後才能評論