QT实例3(QtCharts数据可视化)

配置

1.需要在pro项目文件中加上以下代码

QT       += charts

2.然后修改头文件 ,在头文件中需要添加下面两行代码

#include <QtCharts>
QT_CHARTS_USE_NAMESPACE

如果配置出错,有可能是在安装时没有选择QtCharts模块,需要找打QT安装目录下的MaintenanceTool.exe文件进行重新添加QtCharts模块。

以下代码仅需要添加到源文件main.cpp文件中方可运行,本文参考QtCreator实例仅简单实现了部分图表。

折线图

  • 基础折线图

    //创建QLineSeries折线图实例
        QLineSeries *series = new QLineSeries();
        //添加数据两种方式,尽量保证坐标(x,y)中x变量有序
    //    series->append(0,6);
    //    series->append(4,8);
    //    series->append(8,5);
    //    series->append(11,5);
    //    series->append(13,3);
    //    series->append(17,6);
        *series<<QPoint(0,6)<<QPoint(4,8)<<QPoint(8,5)<<QPointF(11,5)<<QPointF(13,3)<<QPointF(17,6);
    
        //创建QChart实例,将series添加进去
        QChart *chart = new QChart();
        chart->legend()->hide();
        chart->addSeries(series);
    	//设置标题字体
        QFont font = qApp->font();
        font.setBold(true);
        font.setPointSize(20);
        chart->setTitleFont(font);
        //设置坐标轴
        //chart->createDefaultAxes();//默认坐标轴
        QValueAxis *axisX=new QValueAxis();
        QValueAxis *axisY=new QValueAxis();
        chart->addAxis(axisX,Qt::AlignBottom);
        chart->addAxis(axisY,Qt::AlignLeft);
        axisX->setRange(0,17);
        axisY->setRange(0,15);
        series->attachAxis(axisX);
        series->attachAxis(axisY);
        chart->setTitle("基础折线图");
    
        //创建QChartView对象
        QChartView *chartView = new QChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);
        //显示
        QMainWindow window;
        window.setCentralWidget(chartView);
        window.resize(600, 400);
        window.show();
    

在这里插入图片描述

  • 平滑折线图

    //创建QSplineSeries平滑折线图实例
        QSplineSeries *series = new QSplineSeries();
        //尽量保证坐标(x,y)中x变量有序
        *series<<QPoint(0,6)<<QPoint(4,8)<<QPoint(8,5)<<QPointF(11,5)<<QPointF(13,3)<<QPointF(17,6);
    
        //创建QChart实例,将series添加进去
        QChart *chart = new QChart();
        chart->legend()->hide();
        chart->addSeries(series);
    	//设置标题字体
        QFont font = qApp->font();
        font.setBold(true);
        font.setPointSize(20);
        chart->setTitleFont(font);
        //chart->createDefaultAxes();//默认坐标轴
    	//设置坐标轴
        QValueAxis *axisX=new QValueAxis();
        QValueAxis *axisY=new QValueAxis();
        chart->addAxis(axisX,Qt::AlignBottom);
        chart->addAxis(axisY,Qt::AlignLeft);
        axisX->setRange(0,17);
        axisY->setRange(0,10);
        series->attachAxis(axisX);
        series->attachAxis(axisY);
        chart->setTitle("平滑折线图");
    
        //创建QChartView对象
        QChartView *chartView = new QChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);
        //显示
        QMainWindow window;
        window.setCentralWidget(chartView);
        window.resize(600, 400);
        window.show();
    

在这里插入图片描述

饼状图

//创建QPieSeries饼状图实例
    QPieSeries *series= new QPieSeries();
    // 添加数据
    series->append("不及格",15);
    series->append("及格",35);
    series->append("良好",40);
    series->append("优秀",10);
    // 设置块标签(显示出百分比)
    for(int num=0;num<series->slices().count();num++)
    {
        QPieSlice *slice =series->slices().at(num);
        QString tagText = QString("%1").arg(slice->label()+QStringLiteral(":")+QString::number(slice->percentage()*100)+"%");
        slice->setLabel(tagText);
    }

    // 设置标签显示位置
    series->setLabelsPosition(QPieSlice::LabelPosition::LabelOutside);
    series->setLabelsVisible(true);
    series->slices().at(series->count()-1)->setExploded(true);// 设置最后一个分块突出
    series->setHoleSize(0.4);// 设置中心空心圆大小
    //图表视图
    QChart* chart = new QChart;
    chart->setTitle("成绩饼状统计图");
    //设置标题字体
    QFont font = qApp->font();
    font.setBold(true);
    font.setPointSize(20);
    chart->setTitleFont(font);

    //创建QChart实例,将series添加进去
    chart->addSeries(series);
    chart->setAnimationOptions(QChart::SeriesAnimations);
    //图例
    chart->legend()->setAlignment(Qt::AlignLeft);
    chart->legend()->setBackgroundVisible(false);

    //创建QChartView对象,将QChart实例加入绘画视图
    QChartView* chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    //显示
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(700, 500);
    window.show();

在这里插入图片描述

柱状图

//创建QBarSeries柱状图实例
    QBarSeries *series=new QBarSeries();
    //数据设置
    QBarSet *set0=new QBarSet("张三");
    QBarSet *set1=new QBarSet("李四");
    QBarSet *set2=new QBarSet("王五");
    QBarSet *set3=new QBarSet("赵六");
    *set0<<3000<<4000<<5000;
    *set1<<3500<<3500<<3000;
    *set2<<4000<<3000<<4000;
    *set3<<2000<<4000<<4500;
    series->append(set0);
    series->append(set1);
    series->append(set2);
    series->append(set3);
    
    //创建QChart实例,将series添加进去
    QChart* chart = new QChart;
    chart->setTitle("工资柱状统计表");
    chart->addSeries(series);
	//设置标题字体
    QFont font = qApp->font();
    font.setBold(true);
    font.setPointSize(20);
    chart->setTitleFont(font);
    //图例
    chart->legend()->setAlignment(Qt::AlignLeft);
    chart->legend()->setBackgroundVisible(false);
    //设置坐标轴
    QStringList categories;
    categories << "month1" << "month2" << "month3";
    QBarCategoryAxis *axisX = new QBarCategoryAxis();//初始化X轴
    axisX->append(categories);
    chart->addAxis(axisX, Qt::AlignBottom);
    series->attachAxis(axisX);
    QValueAxis *axisY = new QValueAxis();//初始化Y轴
    axisY->setRange(1000,6000);
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisY);

    //创建QChartView对象,将QChart实例加入绘画视图
    QChartView* chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    //显示
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(700, 500);
    window.show();

在这里插入图片描述

散点图

//创建QScatterSeries散点图实例
    QScatterSeries *series1 = new QScatterSeries();
    series1->setMarkerShape(QScatterSeries::MarkerShapeCircle);  //圆样式
    series1->setMarkerSize(15);//设置绘制的点的大小
    QScatterSeries *series2 = new QScatterSeries();
    series2->setMarkerShape(QScatterSeries::MarkerShapeTriangle); //三角形样式
    series2->setMarkerSize(15);
    for(int i = 0; i < 10; i++)    // 随机添加10个任意点
    {
        int x=rand()%20;
        int y1=2*x+rand()%10;
        int y2=rand()%20+20-x;
        series1->append(x,y1);
        series2->append(x,y2);
    }
    series1->setName("Y1");
    series2->setName("Y2");
    //创建QChart实例,将series1和series2两个实例添加进去
    QChart *chart = new QChart();
    chart->addSeries(series1);
    chart->addSeries(series2);
    //设置标题字体
    QFont font = qApp->font();
    font.setBold(true);
    font.setPointSize(20);
    chart->setTitleFont(font);
    chart->setTitle("散点图");
    //图例
    chart->legend()->setAlignment(Qt::AlignTop);
    chart->legend()->setBackgroundVisible(false);

    //设置坐标轴
    //chart->createDefaultAxes();//默认坐标轴
    QValueAxis *axisX=new QValueAxis();
    QValueAxis *axisY=new QValueAxis();
    chart->addAxis(axisX,Qt::AlignBottom);
    chart->addAxis(axisY,Qt::AlignLeft);
    axisX->setRange(0,20);
    axisY->setRange(0,50);
    series1->attachAxis(axisX);
    series1->attachAxis(axisY);

    //创建QChartView对象
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    //显示
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(600, 400);
    window.show();

在这里插入图片描述

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值