學習目標:Qt 折線圖,柱形圖和扇形統計圖編程
學習基礎
Qt QChart 曲線圖表操作-CSDN博客
學習內容
Qt中繪制三種常見的圖表非常方便, 主要步驟如下:
1. 折線圖:?
- 使用QLineSeries定義折線數據,添加多個坐標點?
- 使用QValueAxis創建X軸和Y軸
- 將系列和坐標軸添加到QChart中
- 設置屬性如標題、線條樣式等
- 添加到QChartView顯示
2. 柱形圖:
- 使用QBarSet定義每個組的柱數據 ?
- 使用QBarSeries添加多個QBarSet組成總系列
- 同樣創建分類軸和值軸
- 可以采用堆積方式顯示
- 其他設置與折線圖類似
3. 餅圖:
- 使用QPieSeries定義餅圖序列 ?
- 通過QPieSlice添加多個扇形部分
- 設置每個扇形的名稱、百分比和顏色
- 添加到QChart并使用QChartView顯示
- 可以手動修改扇形的開始和長度Angle
Qt Chart提供了很友好的接口實現各種常見圖表。開發者只需熟悉這幾個關鍵類,就可以方便繪制不同需求的圖表。它使用戶界面的數據可視化開發工作效率得到很大提升。
話不多說直接開始上代碼
項目效果
?核心代碼
折線圖
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//創建圖表QChart* chart =new QChart;chart->setTitle("全球各國軍費增長折線圖"); // 設置標題名稱ui->graphicsView->setChart(chart);//設置坐標QValueAxis* ax =new QValueAxis;ax->setTitleText("年份");ax->setRange(2018,2022);ax->setTickCount(5); //設置刻度 即年份總個數ax->setLineVisible(true); //網格ax->setGridLineVisible(true);//網格線均可見QValueAxis *ay =new QValueAxis;ay->setTitleText("軍費(萬億)");ay->setRange(3000,10000);ay->setTickCount(5);ay->setLineVisible(true);ay->setGridLineVisible(true);//繪畫折線QLineSeries* series =new QLineSeries;series->setName("中國");series->setColor(Qt::red);// 添加數據點到序列series->append(2018,6500);series->append(2019,4900);series->append(2020,8000);series->append(2021,9000);series->append(2022,9500);QLineSeries* series2 =new QLineSeries;series2->setName("俄羅斯");series2->setColor(Qt::green);// 添加數據點到序列series2->append(2018,4500);series2->append(2019,4900);series2->append(2020,9000);series2->append(2021,10000);series2->append(2022,10000);//加入到圖表chart->addSeries(series);chart->setAxisX(ax,series);chart->setAxisY(ay,series);chart->addSeries(series2);chart->setAxisX(ax,series2);chart->setAxisY(ay,series2);
}Widget::~Widget()
{delete ui;
}
柱形圖
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;//創建圖表QChart * chart =new QChart;chart->setTitle("某某學校實驗班高考成績分數");//創建條形對象數據QBarSet* bar =new QBarSet("bar");*bar<<560<<710<<599<<688<<701;//繪畫條形QStackedBarSeries* series =new QStackedBarSeries;series->append(bar);QStringList strlist={"小王","小李","小吳","小張","小趙"};//創建x y軸 通過QBarCategoryAxis類將類型添加到圖表的軸QBarCategoryAxis* ax =new QBarCategoryAxis;ax->setTitleText("考生姓名");ax->append(strlist);QValueAxis* ay =new QValueAxis;ay->setTitleText("高考總分階梯");ay->setRange(0,750);chart->addSeries(series);chart->addAxis(ax,Qt::AlignBottom);chart->addAxis(ay,Qt::AlignLeft);series->attachAxis(ax);series->attachAxis(ay);chart->legend()->setVisible(false); // 設置繪圖區與圖表邊界chart->legend()->setAlignment(Qt::AlignBottom);QChartView* view = new QChartView;view->setChart(chart);w.setWindowTitle("高考成績--柱狀圖表展示");w.setCentralWidget(view);w.resize(800,500);w.show();return a.exec();
}
餅形圖
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;//創建餅狀圖繪畫對象QPieSeries* series =new QPieSeries;// 占用比例series->append("70分以下:30%",30);series->append("70分-85分:40%",40);series->append("86分-99分:25%",25);series->append("100分:5%",5);series->setLabelsVisible(true);// 設置標簽屬性,可見QPieSlice* s1=series->slices().at(0);QPieSlice* s2=series->slices().at(1);QPieSlice* s3=series->slices().at(2);QPieSlice* s4=series->slices().at(3);s1->setColor(Qt::red);s2->setColor(Qt::green);s3->setColor(Qt::yellow);s4->setColor(Qt::black);//創建圖表QChart* chart =new QChart;chart->addSeries(series);chart->setTitle("餅圖形狀--班級考試百分制整數比例");//創建圖表視圖QChartView* view =new QChartView;view->setChart(chart);w.setCentralWidget(view);w.resize(600,600);w.show();return a.exec();
}
總結
總的來說,通過這個示例可以很清楚地了解QT中的圖表繪制過程:
1. 首先創建相應的圖表對象,如QLineChart、QBarChart、QPieChart等。設置標題、屬性等。
2. 定義數據模型,如QLineSeries、QBarSeries、QPieSeries等,用于存儲圖表的數據點。?
3. 添加具體的數據到系列對象中,如坐標點、分類數據、占比等。
4. 創建坐標軸對象QValueAxis和QCategoryAxis,配置名稱、范圍等。?
5. 將系列與坐標軸添加到圖表對象中,實現數據與軸的關聯。
6. 創建QChartView視圖對象,設置圖表給視圖即可渲染展示。
7. 另外可以對分量設置個性化屬性,如顏色、標簽等。
通過極少量API調用,就可以繪制出豐富的線性圖、柱狀圖、餅圖等不同圖表類型。這說明QT Chart的設計理念非常清晰、使用也很簡單易上手。開發人員可以根據實際需求,通過組合這些基礎類快速實現各種數據可視化工作。這無疑大大提升了開發效率。
最后附上源代碼鏈接
對您有幫助的話,幫忙點個star
Qt demo: 學習qt過程 (gitee.com)