Qt 统计图编程

学习目标:Qt 折线图,柱形图和扇形统计图编程

学习基础

Qt QChart 曲线图表操作-CSDN博客

学习内容

Qt中绘制三种常见的图表非常方便, 主要步骤如下:

  1. 折线图:
  • 使用QLineSeries定义折线数据,添加多个坐标点

  • 使用QValueAxis创建X轴和Y轴

  • 将系列和坐标轴添加到QChart中

  • 设置属性如标题、线条样式等

  • 添加到QChartView显示

  1. 柱形图:
  • 使用QBarSet定义每个组的柱数据

  • 使用QBarSeries添加多个QBarSet组成总系列

  • 同样创建分类轴和值轴

  • 可以采用堆积方式显示

  • 其他设置与折线图类似

  1. 饼图:
  • 使用QPieSeries定义饼图序列

  • 通过QPieSlice添加多个扇形部分

  • 设置每个扇形的名称、百分比和颜色

  • 添加到QChart并使用QChartView显示

  • 可以手动修改扇形的开始和长度Angle

Qt Chart提供了很友好的接口实现各种常见图表。开发者只需熟悉这几个关键类,就可以方便绘制不同需求的图表。它使用户界面的数据可视化开发工作效率得到很大提升。

话不多说直接开始上代码

项目效果

核心代码

折线图

cpp 复制代码
#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;
}

柱形图

cpp 复制代码
#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();
}

饼形图

cpp 复制代码
#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)

相关推荐
我是菜鸟0713号2 天前
Qt 中 OPC UA 通讯实战
开发语言·qt
JCBP_2 天前
QT(4)
开发语言·汇编·c++·qt·算法
lqjun08273 天前
Qt程序单独运行报错问题
开发语言·qt
计算机编程小央姐3 天前
跟上大数据时代步伐:食物营养数据可视化分析系统技术前沿解析
大数据·hadoop·信息可视化·spark·django·课程设计·食物
CodeCraft Studio3 天前
【案例分享】TeeChart 助力 Softdrill 提升油气钻井数据可视化能力
信息可视化·数据可视化·teechart·油气钻井·石油勘探数据·测井数据
招风的黑耳3 天前
赋能高效设计:12套中后台管理信息系统通用原型框架
信息可视化·axure后台模板·原型模板
程思扬3 天前
利用JSONCrack与cpolar提升数据可视化及跨团队协作效率
网络·人工智能·经验分享·docker·信息可视化·容器·架构
路人与大师3 天前
【Mermaid.js】从入门到精通:完美处理节点中的空格、括号和特殊字符
开发语言·javascript·信息可视化
酷飞飞3 天前
Qt Designer与事件处理
开发语言·qt·命令模式
mkhase3 天前
9.12-QT-基本登陆界面实现
java·jvm·qt