最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt使用QChart實(shí)現(xiàn)靜態(tài)顯示溫度變化曲線

 更新時(shí)間:2023年06月02日 14:45:42   作者:DS小龍哥  
QChart模塊是Qt?Charts庫(kù)的基礎(chǔ),提供了用于創(chuàng)建和顯示各種類型圖表的類和接口,本文主要介紹了如何使用QChart實(shí)現(xiàn)動(dòng)態(tài)顯示3個(gè)設(shè)備的溫度變化曲線,感興趣的可以了解一下

一、QChart介紹

QChart模塊是Qt Charts庫(kù)的基礎(chǔ),提供了用于創(chuàng)建和顯示各種類型圖表的類和接口。Qt Charts庫(kù)是一個(gè)功能豐富、易于使用的數(shù)據(jù)可視化工具庫(kù),可以幫助開發(fā)者在應(yīng)用程序中添加漂亮而又交互性強(qiáng)的圖表。

QChart模塊主要包括以下類:

  • QChart:表示一個(gè)基本的圖表容器,它可以包含一個(gè)或多個(gè)QAbstractSeries對(duì)象。開發(fā)者可以設(shè)置圖表的標(biāo)題、動(dòng)畫效果、背景、邊框以及坐標(biāo)軸等屬性,并添加或移除序列數(shù)據(jù)。
  • QAbstractSeries:表示一個(gè)序列數(shù)據(jù),它是QLineSeries、QScatterSeries等具體序列類型的基類,開發(fā)者可以通過繼承該類來(lái)創(chuàng)建自定義序列類型。
  • QLineSeries:表示一條折線序列,它可以用于繪制單一或多條折線曲線圖。
  • QScatterSeries:表示一個(gè)散點(diǎn)圖序列,它可以用于繪制數(shù)據(jù)點(diǎn)之間的離散分布情況。
  • QBarSeries:表示一個(gè)條形圖序列,它可以用于展示分類數(shù)據(jù)在不同類別中的分布情況。
  • QPercentBarSeries:表示一個(gè)百分比條形圖序列,它可以用于展示分類數(shù)據(jù)在不同類別中的占比情況。
  • QPieSeries:表示一個(gè)餅圖序列,它可以用于展示不同數(shù)據(jù)之間的占比關(guān)系。
  • QChartView:表示QChart對(duì)象的視圖類,開發(fā)者可以將QChart對(duì)象設(shè)置為QChartView的子對(duì)象,并添加到窗口中以便顯示。

通過使用QChart模塊,開發(fā)者可以輕松地創(chuàng)建并自定義各種類型的圖表,例如折線曲線圖、散點(diǎn)圖、條形圖、餅圖等,并以交互性強(qiáng)的方式來(lái)展示數(shù)據(jù),為應(yīng)用程序增加了更多的可視化效果。

下面是通過折線圖顯示3個(gè)設(shè)備的溫度變化趨勢(shì)效果:

二、實(shí)現(xiàn)代碼(1)

以下是使用QChart顯示3個(gè)折線圖,表示3個(gè)設(shè)備的溫度曲線的實(shí)現(xiàn)代碼: (溫度數(shù)據(jù)是模擬的數(shù)據(jù))

?#include <QtWidgets/QMainWindow>
?#include <QtCharts/QChart>
?#include <QtCharts/QLineSeries>
?#include <QtCharts/QChartView>
?#include <QtCore/QRandomGenerator>
?#include <QtCore/QDebug>
?#include <QtGui/QWindow>
??
?QT_CHARTS_USE_NAMESPACE
??
?class MainWindow : public QMainWindow
?{
? ? ?Q_OBJECT
??
?public:
? ? ?MainWindow(QWidget *parent = nullptr)
? ? ? ?  : QMainWindow(parent)
? ?  {
? ? ? ? ?// 數(shù)據(jù)初始化
? ? ? ? ?for (int i = 0; i < 30; i++) {
? ? ? ? ? ? ?m_data[0].append(QPointF(i, QRandomGenerator::global()->bounded(10, 30)));
? ? ? ? ? ? ?m_data[1].append(QPointF(i, QRandomGenerator::global()->bounded(20, 40)));
? ? ? ? ? ? ?m_data[2].append(QPointF(i, QRandomGenerator::global()->bounded(30, 50)));
? ? ? ?  }
??
? ? ? ? ?// 創(chuàng)建線性圖對(duì)象
? ? ? ? ?QChart* chart = new QChart();
? ? ? ? ?chart->setTitle("Temperature Data");
? ? ? ? ?chart->setAnimationOptions(QChart::SeriesAnimations);
??
? ? ? ? ?// 創(chuàng)建線序列對(duì)象
? ? ? ? ?QLineSeries* series1 = new QLineSeries(chart);
? ? ? ? ?QLineSeries* series2 = new QLineSeries(chart);
? ? ? ? ?QLineSeries* series3 = new QLineSeries(chart);
??
? ? ? ? ?// 設(shè)置線顏色、名字和寬度
? ? ? ? ?series1->setColor(Qt::red);
? ? ? ? ?series1->setName("Device1");
? ? ? ? ?series1->setPen(QPen(Qt::red, 2));
??
? ? ? ? ?series2->setColor(Qt::green);
? ? ? ? ?series2->setName("Device2");
? ? ? ? ?series2->setPen(QPen(Qt::green, 2));
??
? ? ? ? ?series3->setColor(Qt::blue);
? ? ? ? ?series3->setName("Device3");
? ? ? ? ?series3->setPen(QPen(Qt::blue, 2));
??
? ? ? ? ?// 添加數(shù)據(jù)到線序列對(duì)象
? ? ? ? ?for (const QPointF& point : m_data[0]) {
? ? ? ? ? ? ?*series1 << point;
? ? ? ?  }
? ? ? ? ?for (const QPointF& point : m_data[1]) {
? ? ? ? ? ? ?*series2 << point;
? ? ? ?  }
? ? ? ? ?for (const QPointF& point : m_data[2]) {
? ? ? ? ? ? ?*series3 << point;
? ? ? ?  }
??
? ? ? ? ?// 添加線序列對(duì)象到圖表
? ? ? ? ?chart->addSeries(series1);
? ? ? ? ?chart->addSeries(series2);
? ? ? ? ?chart->addSeries(series3);
??
? ? ? ? ?// 設(shè)置橫軸和縱軸標(biāo)簽
? ? ? ? ?QValueAxis* axisX = new QValueAxis();
? ? ? ? ?axisX->setTitleText("Time (s)");
? ? ? ? ?axisX->setRange(0, 29);
??
? ? ? ? ?QValueAxis* axisY = new QValueAxis();
? ? ? ? ?axisY->setTitleText("Temperature (℃)");
? ? ? ? ?axisY->setRange(0, 60);
??
? ? ? ? ?// 添加橫軸和縱軸到圖表
? ? ? ? ?chart->setAxisX(axisX);
? ? ? ? ?chart->setAxisY(axisY);
??
? ? ? ? ?// 創(chuàng)建圖表視圖
? ? ? ? ?QChartView* chartView = new QChartView(chart);
? ? ? ? ?chartView->setRenderHint(QPainter::Antialiasing);
? ? ? ? ?setCentralWidget(chartView);
? ?  }
??
?private:
? ? ?// 存儲(chǔ)溫度數(shù)據(jù)的二維數(shù)組
? ? ?QVector<QPointF> m_data[3];
?};
??
?int main(int argc, char *argv[])
?{
? ? ?QApplication a(argc, argv);
? ? ?MainWindow w;
? ? ?w.show();
? ? ?return a.exec();
?}

以上是一個(gè)完整的Qt窗口程序,可以直接運(yùn)行并顯示3個(gè)設(shè)備的溫度曲線。

在程序中,使用QChart對(duì)象作為圖表容器,創(chuàng)建了3個(gè)QLineSeries對(duì)象用于展示3個(gè)設(shè)備的溫度數(shù)據(jù),并將它們添加到QChart對(duì)象中。自定義了橫軸和縱軸標(biāo)簽及范圍,并將它們添加到QChart對(duì)象中。最后,創(chuàng)建了一個(gè)QChartView對(duì)象,并將QChart對(duì)象設(shè)置為其子對(duì)象,以展示整個(gè)溫度曲線圖表。

三、實(shí)現(xiàn)代碼(2)

如果自己需要設(shè)計(jì)UI界面,添加QChart顯示折線圖。下面演示一下過程。

1.添加模塊

2.設(shè)計(jì)UI

3.設(shè)計(jì)代碼-頭文件

?#ifndef WIDGET_H
?#define WIDGET_H
??
?#include <QWidget>
??
?// 包含line chart需要的頭文件
?#include <QtCharts/QChart>
?#include <QtCharts/QLineSeries>
?#include <QtCharts/QChartView>
?#include <QtCore/QRandomGenerator>
?#include <QValueAxis>
?#include <QScatterSeries>
??
?// 引用命名空間
?QT_CHARTS_USE_NAMESPACE
??
?QT_BEGIN_NAMESPACE
?namespace Ui { class Widget; }
?QT_END_NAMESPACE
??
?class Widget : public QWidget
?{
? ? ?Q_OBJECT
??
?public:
? ? ?Widget(QWidget *parent = nullptr);
? ? ?~Widget();
??
?private:
? ? ?Ui::Widget *ui;
??
? ? ? QChart *chart;
? ? ? QChartView *chartView;
?};
?#endif // WIDGET_H

4.設(shè)計(jì)代碼-源文件

?#include "widget.h"
?#include "ui_widget.h"
??
?Widget::Widget(QWidget *parent)
? ?  : QWidget(parent)
? ?  , ui(new Ui::Widget)
?{
? ? ?ui->setupUi(this);
??
? ? ?// 存儲(chǔ)溫度數(shù)據(jù)的二維數(shù)組
? ? ?QVector<QPointF> m_data[3];
??
? ? ?// 數(shù)據(jù)初始化
? ? ?for (int i = 0; i < 30; i++) {
? ? ? ? ?m_data[0].append(QPointF(i, QRandomGenerator::global()->bounded(10, 30)));
? ? ? ? ?m_data[1].append(QPointF(i, QRandomGenerator::global()->bounded(20, 40)));
? ? ? ? ?m_data[2].append(QPointF(i, QRandomGenerator::global()->bounded(30, 50)));
? ?  }
??
? ? ?// 創(chuàng)建線性圖對(duì)象
? ? ?QChart* chart = new QChart();
? ? ?chart->setTitle("Temperature Data");
? ? ?chart->setAnimationOptions(QChart::SeriesAnimations);
??
? ? ?// 創(chuàng)建線序列對(duì)象
? ? ?QLineSeries* series1 = new QLineSeries(chart);
? ? ?QLineSeries* series2 = new QLineSeries(chart);
? ? ?QLineSeries* series3 = new QLineSeries(chart);
??
? ? ?// 設(shè)置線顏色、名字和寬度
?// ?  series1->setColor(Qt::red);
? ? ?series1->setName("Device1");
?// ?  series1->setPen(QPen(Qt::red, 2));
??
?// ?  series2->setColor(Qt::green);
? ? ?series2->setName("Device2");
?// ?  series2->setPen(QPen(Qt::green, 2));
??
?// ?  series3->setColor(Qt::blue);
? ? ?series3->setName("Device3");
?// ?  series3->setPen(QPen(Qt::blue, 2));
??
??
? ? ?// 添加數(shù)據(jù)到線序列對(duì)象
? ? ?for (const QPointF& point : m_data[0]) {
? ? ? ? ?*series1 << point;
? ?  }
? ? ?for (const QPointF& point : m_data[1]) {
? ? ? ? ?*series2 << point;
? ?  }
? ? ?for (const QPointF& point : m_data[2]) {
? ? ? ? ?*series3 << point;
? ?  }
??
? ? ?// 添加線序列對(duì)象到圖表
? ? ?chart->addSeries(series1);
? ? ?chart->addSeries(series2);
? ? ?chart->addSeries(series3);
??
? ? ?// 設(shè)置橫軸和縱軸標(biāo)簽
? ? ?QValueAxis* axisX = new QValueAxis();
? ? ?axisX->setTitleText("Time (s)");
? ? ?axisX->setRange(0, 29);
??
? ? ?QValueAxis* axisY = new QValueAxis();
? ? ?axisY->setTitleText("Temperature (℃)");
? ? ?axisY->setRange(0, 60);
??
? ? ?// 添加橫軸和縱軸到圖表
? ? ?chart->setAxisX(axisX);
? ? ?chart->setAxisY(axisY);
??
? ? ?// 創(chuàng)建圖表視圖
? ? ?QChartView* chartView = new QChartView(chart);
? ? ?chartView->setRenderHint(QPainter::Antialiasing);
??
??
? ? ?//將視圖添加到布局
? ? ?ui->view_verticalLayout->addWidget(chartView);
?}
??
??
??
?Widget::~Widget()
?{
? ? ?delete ui;
?}

到此這篇關(guān)于Qt使用QChart實(shí)現(xiàn)靜態(tài)顯示溫度變化曲線的文章就介紹到這了,更多相關(guān)Qt QChart內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入C++可見性與生命期的區(qū)別詳解

    深入C++可見性與生命期的區(qū)別詳解

    本篇文章對(duì)C++中可見性與生命期的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言 OpenCV實(shí)現(xiàn)柱面投影

    C語(yǔ)言 OpenCV實(shí)現(xiàn)柱面投影

    在做全景拼接的時(shí)候,為了保持圖片中的空間約束與視覺的一致性,需要進(jìn)行柱面投影,否則離中心圖像距離越遠(yuǎn)的圖像拼接后變形越大。本文將具體介紹一下這如何實(shí)現(xiàn),需要的可以參考一下
    2021-12-12
  • C++引用的使用與const修飾符

    C++引用的使用與const修飾符

    這篇文章介紹了C++引用使用與const修飾符,引用是給已經(jīng)定義的變量一個(gè)別名,可以簡(jiǎn)單理解成同一個(gè)變量的昵稱,既然是昵稱或者是別名,顯然它和原本的變量名有著同樣的效力,所以我們對(duì)別名進(jìn)行修改,原本的變量值也一樣會(huì)發(fā)生變化,下面來(lái)看看詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-11-11
  • C++標(biāo)準(zhǔn)庫(kù)中的Stack(堆棧)和Queue(隊(duì)列)詳解

    C++標(biāo)準(zhǔn)庫(kù)中的Stack(堆棧)和Queue(隊(duì)列)詳解

    在C++標(biāo)準(zhǔn)模板庫(kù)(STL)中,stack和queue是兩種非常重要的容器適配器,這篇文章主要介紹了C++標(biāo)準(zhǔn)庫(kù)中Stack(堆棧)和Queue(隊(duì)列)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10
  • C++實(shí)現(xiàn)歸并排序算法

    C++實(shí)現(xiàn)歸并排序算法

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)歸并排序算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++將保存char、int 和double到txt文件中

    C++將保存char、int 和double到txt文件中

    這篇文章主要介紹了C++如何將保存char、int 和double到txt文件中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • OJ中G++和C++的區(qū)別

    OJ中G++和C++的區(qū)別

    今天小編就為大家分享一篇關(guān)于OJ中G++和C++的區(qū)別,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • 使用opencv實(shí)現(xiàn)車道線檢測(cè)實(shí)戰(zhàn)代碼

    使用opencv實(shí)現(xiàn)車道線檢測(cè)實(shí)戰(zhàn)代碼

    這篇文章主要介紹了opencv車道線檢測(cè)實(shí)戰(zhàn),效果非常逼真,代碼簡(jiǎn)單易懂,對(duì)opencv車道線檢測(cè)實(shí)戰(zhàn)代碼感興趣的朋友一起看看吧
    2022-03-03
  • c++讀取和寫入TXT文件的整理方法

    c++讀取和寫入TXT文件的整理方法

    今天小編就為大家分享一篇c++讀取和寫入TXT文件的整理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-07-07
  • 詳解C語(yǔ)言中的錯(cuò)誤報(bào)告errno與其相關(guān)應(yīng)用方法

    詳解C語(yǔ)言中的錯(cuò)誤報(bào)告errno與其相關(guān)應(yīng)用方法

    這篇文章主要介紹了C語(yǔ)言中的錯(cuò)誤報(bào)告errno與其相關(guān)應(yīng)用方法,包括errno和strerror以及perror的介紹,需要的朋友可以參考下
    2015-08-08

最新評(píng)論

镇远县| 西林县| 华池县| 杂多县| 绥阳县| 安远县| 吉木乃县| 东乌珠穆沁旗| 九江市| 怀仁县| 长沙市| 丽江市| 泗阳县| 磐安县| 恩施市| 苍梧县| 江北区| 大洼县| 长治市| 常州市| 华安县| 沾化县| 华蓥市| 丹棱县| 荣昌县| 称多县| 永登县| 房山区| 凤山市| 民丰县| 华容县| 大兴区| 永登县| 固镇县| 同心县| 濉溪县| 青河县| 甘孜县| 澄迈县| 衡水市| 惠安县|