国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt Charts - 繪制簡單曲線圖(1)

這篇具有很好參考價值的文章主要介紹了Qt Charts - 繪制簡單曲線圖(1)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 概述

QSplineSeries類是Qt圖表模塊中的一個曲線系列類,用于繪制平滑的二次和三次曲線。這個系列通過在給定的數(shù)據(jù)點之間插值來繪制曲線,從而使得曲線更加平滑。
使用QSplineSeries時,需要將數(shù)據(jù)點作為QPointF類型的列表傳遞給數(shù)據(jù)集。然后將數(shù)據(jù)集添加到QChart中。可以使用QSplineSeries的其他方法來設(shè)置線條顏色、寬度、拐點形狀等。

2 主要功能

  1. 動態(tài)繪制曲線圖
  2. 放大、縮小以及還原圖表視圖
  3. 實時獲取圖表坐標值

3 功能步驟

3.1 動態(tài)曲線圖

  1. .pro文件加入模塊,charts。
QT       += core gui charts
  1. 在設(shè)計師界面拖拽一個QGraphicsView控件,提升為自己重寫的MyChartView類。
    qt 曲線繪制,# Qt圖表,qt,ui,開發(fā)語言,c++
    qt 曲線繪制,# Qt圖表,qt,ui,開發(fā)語言,c++
  2. MyChartView類以及MainWindow類頭文件里加入圖表命名空間,以及對應頭文件。
#include <QChartView>

QT_CHARTS_USE_NAMESPACE
// 或者 using namespace QtCharts;
  1. 主要代碼
// 頭文件相關(guān)聲明
const int AXIS_MIN_X =   0;
const int AXIS_MAX_X =  50;
const int AXIS_MIN_Y = -50;
const int AXIS_MAX_Y =  50;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private Q_SLOTS:
    void onTimeOut();

private:
    void createChart();  // 創(chuàng)建圖表

private:
    Ui::MainWindow *ui;

    QChart *chart;
    QSplineSeries *series;
    QValueAxis *axisX;
    QTimer *timer;
    QRandomGenerator *randGenerator;
    int m_lastY;                        // 記錄series上一次y軸值
    bool m_pause;                       // 記錄是否暫停繪圖
    bool m_start;                       // 記錄是否啟動繪圖
    QLabel *m_labXYValue;
};
// 構(gòu)造函數(shù)
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , m_lastY(0)
    , m_pause(false)
    , m_start(false)
{
    ui->setupUi(this);

    timer = new QTimer(this);
    randGenerator = QRandomGenerator::global();
    m_labXYValue = new QLabel("X = , Y = ", this);
    ui->statusbar->addWidget(m_labXYValue);

    createChart(); // 創(chuàng)建圖表

    connect(timer, &QTimer::timeout, this, &MainWindow::onTimeOut);
}
// 創(chuàng)建圖表
void MainWindow::createChart()
{
    chart = new QChart;
    ui->chartView->setChart(chart);
    ui->chartView->setRenderHint(QPainter::Antialiasing);

    series = new QSplineSeries;
    series->setName("隨機數(shù)動態(tài)曲線");

    QPen pen;
    pen.setStyle(Qt::SolidLine);
    pen.setWidth(2);
    pen.setColor(QColor(30, 144, 255));
    series->setPen(pen);

    chart->addSeries(series);

    axisX = new QValueAxis;
    axisX->setRange(AXIS_MIN_X, AXIS_MAX_X); // 設(shè)置坐標軸范圍
    axisX->setLabelFormat("%.1f"); // 標簽格式
    axisX->setTickCount(6); // 坐標軸刻度的數(shù)量
//    axisX->setMinorTickCount(2); // 坐標軸小刻度的數(shù)量
    axisX->setMinorGridLineVisible(true);
    axisX->setTitleText("X軸"); //標題

    QValueAxis *axisY = new QValueAxis;
    axisY->setRange(AXIS_MIN_Y, AXIS_MAX_Y);
    axisY->setLabelFormat("%.1f");
    axisY->setTickCount(11);
//    axisY->setMinorTickCount(2);
    axisY->setMinorGridLineVisible(true);
    axisY->setTitleText("Y軸");

    chart->addAxis(axisX, Qt::AlignBottom);
    chart->addAxis(axisY, Qt::AlignLeft);

    series->attachAxis(axisX); // 需在chart->addSeries(series)后
    series->attachAxis(axisY);

    //-----------
    series->append(QPointF(0.0, 0.0));
}

主要的思路就是通過使用定時器并設(shè)置一定的間隔,不斷往序列添加QPointF。繪制到圖表并顯示到圖表視圖上。這里的QPointF是通過Qt的隨機數(shù)生成器類QRandomGenerator來生成曲線序列y軸值,具體的序列點也可以通過實際采集的數(shù)據(jù)來進行顯示。

// count: 全局靜態(tài)統(tǒng)計x軸值的變量
void MainWindow::onTimeOut()
{
    timer->stop();
    if(count > AXIS_MAX_X) {
        series->remove(0);
        chart->axes(Qt::Horizontal, series).at(0)->setMin(count - AXIS_MAX_X);
        chart->axes(Qt::Horizontal, series).at(0)->setMax(count);
    }
    int y = randGenerator->bounded(m_lastY - 15, m_lastY + 16);
    if (y < AXIS_MIN_Y) { // 生成的y軸值小于y軸最小值
        y += 15;
    } else if (y > AXIS_MAX_Y) { // 生成的y軸值大于y軸最大值
        y -= 15;
    }
    series->append(QPointF(count, y));
    m_lastY = y; // 記錄series上一次y軸值
    count += 2;
    timer->start(300);
}

3.2 放大、縮小以及還原

通過QChart類提供的函數(shù)實現(xiàn)

void MainWindow::on_actZoomIn_triggered()
{
    chart->zoom(1.2);
}
void MainWindow::on_actZoomOut_triggered()
{
    chart->zoom(0.8);
}
void MainWindow::on_actZoomReset_triggered()
{
    chart->zoomReset();
}

3.3 實時獲取圖表坐標值

  1. 在自己的圖表視圖類里添加自定義鼠標移動信號,以及重寫父類鼠標移動事件。
class MyChartView : public QChartView
{
    Q_OBJECT
public:
    explicit MyChartView(QWidget *parent = nullptr);

protected:
    void mouseMoveEvent(QMouseEvent *event) override;
    void wheelEvent(QWheelEvent *event) override;

signals:
    void mouseMovePoint(QPoint point);
};
  1. 源文件定義

setMouseTracking(true) 將鼠標跟蹤設(shè)置為true(缺省為false)。如果不設(shè)置為true,窗口組件只在某個鼠標按鍵按下時才接收鼠標移動事件,設(shè)置為true 之后,只要鼠標移動就會發(fā)射mouseMoveEvent()事件。

MyChartView::MyChartView(QWidget *parent) : QChartView(parent)
{
    setMouseTracking(true);
}

void MyChartView::mouseMoveEvent(QMouseEvent *event)
{
    QPoint point = event->pos();
    emit mouseMovePoint(point);
    QChartView::mouseMoveEvent(event);
}

void MyChartView::wheelEvent(QWheelEvent *event)
{
    // 垂直滾動
    if (event->angleDelta().y() > 0) {
        chart()->zoom(1.2);
    } else {
        chart()->zoom(0.8);
    }
    QChartView::wheelEvent(event);
}
  1. 在窗口類(MainWindow)里連接與MyChartView類的信號槽。
connect(ui->chartView, &MyChartView::mouseMovePoint, this, &MainWindow::onMouseMovePoint);

void MainWindow::onMouseMovePoint(QPoint point)
{
    QPointF pos = ui->chartView->chart()->mapToValue(point);
    m_labXYValue->setText(QString("X = %1, Y = %2")
        .arg(QString::number(pos.x(), 'f', 2))
        .arg(QString::number(pos.y(), 'f', 2)));
}

4 具體效果

qt 曲線繪制,# Qt圖表,qt,ui,開發(fā)語言,c++文章來源地址http://www.zghlxwxcb.cn/news/detail-759597.html

到了這里,關(guān)于Qt Charts - 繪制簡單曲線圖(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于IMX6ULL的AP3216C的QT動態(tài)數(shù)據(jù)曲線圖顯示

    基于IMX6ULL的AP3216C的QT動態(tài)數(shù)據(jù)曲線圖顯示

    前言: 本文為手把手教學 Linux+QT 的典型基礎(chǔ)項目 AP3216C 的數(shù)據(jù)折線圖顯示,項目使用正點原子的 IMX6ULL ?阿爾法( Cortex-A7 系列)開發(fā)板。項目需要實現(xiàn) AP3216C 在 Linux 系統(tǒng)下的驅(qū)動,使用 QT 設(shè)計 AP3216C 的數(shù)據(jù)顯示頁面作為項目的應用層。該項目屬于非常簡單的入門級項目,核心

    2024年02月16日
    瀏覽(35)
  • 98.qt qml-使用曲線圖綜合示例、支持多種鼠標交互、支持百萬數(shù)據(jù)顯示(已適配黑白風格)

    98.qt qml-使用曲線圖綜合示例、支持多種鼠標交互、支持百萬數(shù)據(jù)顯示(已適配黑白風格)

    在上章我們只是簡單實現(xiàn)了曲線圖和折線圖的顯示: 79.qt qml-如何在QML中使用QCustomPlot之曲線/折線示例(已適配黑白風格)_qml 折線圖_諾謙的博客-CSDN博客 所以本章實現(xiàn)綜合示例、并添加多種功能如下所示: 詳細顯示:鼠標任意移動顯示具體值內(nèi)容 鼠標右擊:?彈出菜單欄,支持

    2024年02月05日
    瀏覽(34)
  • 【MATLAB】動態(tài)繪制曲線圖(二維曲線)

    【MATLAB】動態(tài)繪制曲線圖(二維曲線)

    先看效果 ??????????????? 主程序: 加載數(shù)據(jù)的部分我省略了,就是data1這個矩陣 動態(tài)繪圖函數(shù): 這里暫時只支持設(shè)置線性、顏色、markerstyle這三個參數(shù)吧,主要是用 line() 這個函數(shù)把點連起來,設(shè)置line的參數(shù)就是曲線的樣式,查看幫助文檔 doc line 可以自定

    2024年02月16日
    瀏覽(25)
  • PyLab繪制曲線圖

    PyLab繪制曲線圖

    PyLab 是一個面向 Matplotlib 的繪圖庫接口,其語法和 MATLAB 十分相近。它和 Pyplot ??於級?qū)崿F(xiàn) Matplotlib 的繪圖功能。PyLab 是一個單獨的模塊,隨 Matplotlib 軟件包一起安裝,該模塊的導包方式和 Pyplot 不同,如下所示: PyLab 是一個很便捷的模塊,下面對它的使用方法做相應的介紹

    2024年02月16日
    瀏覽(24)
  • C++ Qt開發(fā):Charts折線圖繪制詳解

    C++ Qt開發(fā):Charts折線圖繪制詳解

    Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點介紹 QCharts 折線圖的常用方法及靈活運用。 折線圖(Line Chart)是一種常用的數(shù)據(jù)可

    2024年02月04日
    瀏覽(35)
  • C++ Qt開發(fā):Charts繪制各類圖表詳解

    C++ Qt開發(fā):Charts繪制各類圖表詳解

    Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點介紹 TreeWidget 與 QCharts 的常用方法及靈活運用。 在之前的文章中筆者介紹了如何使

    2024年02月04日
    瀏覽(23)
  • 【QCustomPlot】繪制 x-y 曲線圖

    【QCustomPlot】繪制 x-y 曲線圖

    使用 QCustomPlot 繪圖庫輔助開發(fā)時整理的學習筆記。同系列文章目錄可見 《繪圖庫 QCustomPlot 學習筆記》目錄。本篇介紹如何使用 QCustomPlot 繪制 x-y 曲線圖,需要 x 軸數(shù)據(jù)與 y 軸數(shù)據(jù)都已知,示例中使用的 QCustomPlot 版本為 Version 2.1.1 ,QT 版本為 5.9.2 。 目錄 說明 1. 示例工程配

    2024年02月09日
    瀏覽(24)
  • 微信小程序Canvas繪制曲線圖餅圖柱狀圖雷達圖蛛網(wǎng)圖實現(xiàn)(附源碼)
  • Qt Charts - 實時曲線

    按照之前的一篇文章,先在工程中添加QChart、QChartView,代碼如下: 然后定義兩個坐標軸,一個用作X軸,一個用作Y軸, 添加頭文件: 創(chuàng)建兩個QValueAxis: 在構(gòu)造函數(shù)中,對兩個坐標軸進行實例化,把X軸范圍設(shè)置為0-10并放置在坐標系的底部,Y軸范圍設(shè)置為0-10并放置在坐標系的

    2024年02月06日
    瀏覽(26)
  • C++ Qt開發(fā):Charts折線圖綁定事件

    C++ Qt開發(fā):Charts折線圖綁定事件

    Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點介紹 QCharts 折線圖的常用方法及靈活運用。 在上一篇文章中筆者介紹了關(guān)于 QChart

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包