QT Charts绘图-柱状图、折线图的绘画

QT Charts绘图-柱状图、折线图的绘画

​ 图表的类型由数据序列决定,除了折线图,QT charts还提供了柱状图、饼图、百分比图等常见图表。本程序主要目的时演示柱状图的绘制方法,以此深入了解QT Charts的基本用法。

程序实现的功能

​ 在运行界面的左上方 “初始化数据“ 按钮实现了随机生成若干个学生的数学、语文、英语分数。平均分是自动计算的,左下方是根据分数统计的结果,右方是图表的页面。当我们修改学生数据时,themodel会发出itemChanged()信号,相应的on_itemChanged()槽函数自动跟新图表,和统计结果。运行界面如下:

在这里插入图片描述

界面分析

​ 窗口左上方是一个QTableView组件,使用Model/View结构提供数据编辑功能。左下角是一个QTreeWidget组件,用于显示统计数据结果。窗口右方是一个QTabWidget组件,用于显示柱状图。图表的显示用一个QgraphicsView组件升级为QChartsView。

mainwindow.h的实现

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include    <QStandardItemModel>
#include    <QItemSelectionModel>
#include <QtCharts>

#define fixedColumnCount   5    //数据模型的列数
#define iniDataRowCount    10   //学生个数

#define colNoName       0   //姓名的列编号
#define colNoMath       1   //数学的列编号
#define colNoChinese    2   //语文的列编号
#define colNoEnglish    3   //英语的列编号
#define colNoAverage    4   //平均分的列编号

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    QStandardItemModel  *theModel;//数据模型

    void    iniData();//初始化数据
    void    surveyData();//统计数据

    void    iniBarChart(); //柱状图初始化
    void    buildBarChart();//构建柱状图

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

private slots:
    void on_actGenData_triggered();	//初始化数据
    void on_actTongJi_triggered();	//统计结果
    //当数据发生变化时 更新图表
    void on_itemChanged(QStandardItem *item);
    void on_btnBuildBarChart_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

​ mainwindow.cpp的实现

#include "mainwindow.h"
#include "ui_mainwindow.h"

void MainWindow::iniData()
{
    //数据初始化
    QStringList     headerList;
    headerList<<"姓名"<<"数学"<<"语文"<<"英语"<<"平均分";
    theModel->setHorizontalHeaderLabels(headerList); //设置表头文字

    qsrand(QTime::currentTime().second());//随机数种子
    for (int i=0;i<theModel->rowCount();i++)
    {
        QString studName=QString::asprintf("学生%2d",i+1);
        QStandardItem*  aIt
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值