一、QChart介紹
QChart模塊是Qt Charts庫的基礎,提供了用于創建和顯示各種類型圖表的類和接口。Qt Charts庫是一個功能豐富、易于使用的數據可視化工具庫,可以幫助開發者在應用程序中添加漂亮而又交互性強的圖表。
QChart模塊主要包括以下類:
- QChart:表示一個基本的圖表容器,它可以包含一個或多個QAbstractSeries對象。開發者可以設置圖表的標題、動畫效果、背景、邊框以及坐標軸等屬性,并添加或移除序列數據。
- QAbstractSeries:表示一個序列數據,它是QLineSeries、QScatterSeries等具體序列類型的基類,開發者可以通過繼承該類來創建自定義序列類型。
- QLineSeries:表示一條折線序列,它可以用于繪制單一或多條折線曲線圖。
- QScatterSeries:表示一個散點圖序列,它可以用于繪制數據點之間的離散分布情況。
- QBarSeries:表示一個條形圖序列,它可以用于展示分類數據在不同類別中的分布情況。
- QPercentBarSeries:表示一個百分比條形圖序列,它可以用于展示分類數據在不同類別中的占比情況。
- QPieSeries:表示一個餅圖序列,它可以用于展示不同數據之間的占比關系。
- QChartView:表示QChart對象的視圖類,開發者可以將QChart對象設置為QChartView的子對象,并添加到窗口中以便顯示。
通過使用QChart模塊,開發者可以輕松地創建并自定義各種類型的圖表,例如折線曲線圖、散點圖、條形圖、餅圖等,并以交互性強的方式來展示數據,為應用程序增加了更多的可視化效果。
下面是通過折線圖顯示3個設備的溫度變化趨勢效果:


二、實現代碼(1)
以下是使用QChart顯示3個折線圖,表示3個設備的溫度曲線的實現代碼: (溫度數據是模擬的數據)
#include
#include
#include
#include
#include
#include
#include
?
QT_CHARTS_USE_NAMESPACE
?
class MainWindow : public QMainWindow
{
Q_OBJECT
?
public:
MainWindow(QWidget *parent = nullptr)
: QMainWindow(parent)
{
// 數據初始化
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)));
}
?
// 創建線性圖對象
QChart* chart = new QChart();
chart->setTitle("Temperature Data");
chart->setAnimationOptions(QChart::SeriesAnimations);
?
// 創建線序列對象
QLineSeries* series1 = new QLineSeries(chart);
QLineSeries* series2 = new QLineSeries(chart);
QLineSeries* series3 = new QLineSeries(chart);
?
// 設置線顏色、名字和寬度
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));
?
// 添加數據到線序列對象
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;
}
?
// 添加線序列對象到圖表
chart->addSeries(series1);
chart->addSeries(series2);
chart->addSeries(series3);
?
// 設置橫軸和縱軸標簽
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);
?
// 創建圖表視圖
QChartView* chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
setCentralWidget(chartView);
}
?
private:
// 存儲溫度數據的二維數組
QVector
以上是一個完整的Qt窗口程序,可以直接運行并顯示3個設備的溫度曲線。
在程序中,使用QChart對象作為圖表容器,創建了3個QLineSeries對象用于展示3個設備的溫度數據,并將它們添加到QChart對象中。自定義了橫軸和縱軸標簽及范圍,并將它們添加到QChart對象中。最后,創建了一個QChartView對象,并將QChart對象設置為其子對象,以展示整個溫度曲線圖表。
三、實現代碼(2)
如果自己需要設計UI界面,添加QChart顯示折線圖。下面演示一下過程。
【1】添加模塊

【2】設計UI

【3】設計代碼-頭文件
#ifndef WIDGET_H
#define WIDGET_H
?
#include
?
// 包含line chart需要的頭文件
#include
#include
#include
#include
#include
#include
?
// 引用命名空間
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
?
【3】設計代碼-源文件
#include "widget.h"
#include "ui_widget.h"
?
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
?
// 存儲溫度數據的二維數組
QVector
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
嵌入式
+關注
關注
5198文章
20449瀏覽量
334079 -
C++
+關注
關注
22文章
2124瀏覽量
77119 -
Qt
+關注
關注
2文章
320瀏覽量
40887 -
靜態顯示
+關注
關注
0文章
19瀏覽量
6222
發布評論請先 登錄
相關推薦
熱點推薦
編寫第一個QT程序
學習一種編程語言或編程環境,通常會先編寫一個“Hello World”程序。我們也用 Qt Creator 編寫一個“Hello World”程序,以初步了解 Qt Creator 設
發表于 11-21 10:41
?1523次閱讀
Qt(C++)使用QChart動態顯示3個設備的溫度變化曲線
Qt的QChart是一個用于繪制圖表和可視化數據的類。提供了一個靈活的、可擴展的、跨平臺的圖表繪制解決方案,可以用于各種應用程序,如數據分析、科學計算、金融交易等。
QT編譯發生C++錯誤是什么問題
(401.83 KB, 下載次數: 15)下載附件前邊編譯成功(454.93 KB, 下載次數: 18)下載附件QT編譯發生C++錯誤麻煩看一下,是什么問題?
發表于 01-04 07:16
TouchGFX靜態曲線
自動生成一個默認的,但由于是C++,封裝在了基類中,子類不能直接修改基類中的數據。所以,要在子類中再重新添加自己的數據,方法如下:這個函數,可以放在Screen3View.cpp中的構造函數內。
發表于 10-01 20:29
C++靜態分析中對泛型構件的識別與表示方法
本文從C++靜態分析的角度出發,介紹了模板和泛型構件技術、一個C++靜態分析器實現中對模板和基本泛型構件的分析和識別方法、以及一種基于UML
發表于 08-17 11:16
?14次下載
C/C++源代碼靜態監測設計實現
為了檢測出C/C++源代碼程序中常見的運行時錯誤,設計了一個靜態檢測系統。該系統通過詞法分析、語法分析、語義分析來獲取程序的語法樹。然后系統的檢測程序將會分析語法樹的每
發表于 06-21 15:06
?44次下載
C++的動態多態和靜態多態
多態是 C++ 中面向對象技術的核心機制之一包含靜態多態和動態多態它們之間有一定的相似性但是應用范圍不同該文論述了這種相似性并重點論述了以模板實現的靜態多態的應用范圍
發表于 06-29 15:41
?41次下載
在嵌入式系統中集成Rust和Qt的實踐
Rust 擁有豐富的庫生態系統,用于序列化和反序列化、異步操作、解析不安全輸入、線程、靜態分析等,而 Qt 是一個 C++ 工具包,支持跨各種平臺的豐富的、基于 GUI 的應用程序,從
發表于 05-03 10:26
?3530次閱讀
Qt(C++)使用QChart靜態顯示3個設備的溫度變化曲線
評論