项目 - Qt学生成绩管理系统绘制直方图与折线图(2)

UI设计

 布局 - 图Vertical Layout  按钮Push Button  文本Label

两个对象

 右侧改名

直方图代码

// 初始化绘制直方图
QChart *MainWindow::createBarChart() const
{
     QChart *chart = new QChart();
     //标题
     chart->setTitle("学生成绩直方图显示");

     //对象
     QBarSet *set0 = new QBarSet("数学成绩");
     QBarSet *set1 = new QBarSet("程序成绩");

     //数据获取函数
     Count count;
     count.CountMath();
     //确保数据获取成功
     //qDebug()<< count.lower_six_math << " " << count.six_seven_math << " " << count.seven_eight_math << " " << count.eight_night_math << " " << count.night_ten_math;
     *set0 << count.lower_six_math << count.six_seven_math << count.seven_eight_math << count.eight_night_math << count.night_ten_math;
     *set1 << count.lower_six_programming << count.six_seven_programming << count.seven_eight_programming << count.eight_night_programming << count.night_ten_programming;

     //创建序列对象,添加至序列
     QBarSeries  *series = new QBarSeries (chart);
     series->append(set0);
     series->append(set1);

     chart->addSeries(series);

     //横轴
     QStringList categories;     
     categories << "0-60" << "60-70" << "70-80" << "80-90" << "90-100";

     //创建一个类别轴对象
     QBarCategoryAxis *axis = new QBarCategoryAxis();
     axis->append(categories);//添加横坐标
     chart->createDefaultAxes();//设置默认坐标轴,要初始设置
     chart->setAxisX(axis, series);
     //chart->axes(Qt::Vertical).first()->setRange(0,5000); //设范围,没有会自动适配最大数字

     //在标签和轴之间加空格
     QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
     Q_ASSERT(axisY);
     //浮点
     axisY->setLabelFormat("%.2f  ");

     series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);  //设置标签显示的位置
     series->setLabelsVisible(true);  //设置数据标签可见

     //设置主题
     chart->setTheme(QChart::ChartThemeQt);
     //动画效果
     chart->setAnimationOptions(QChart::SeriesAnimations);

    return chart;
}

折线图代码 

// 初始化绘制折线图
QChart *MainWindow::createLineChart() const
{
    QChart *chart = new QChart();
    //标题
    chart->setTitle("学生成绩折线图显示");

    //对象
    QLineSeries *series1 = new QLineSeries(chart);
    QLineSeries *series2 = new QLineSeries(chart);
    
    series1->setName("数学成绩");
    series2->setName("程序成绩");

    Count count;
    count.CountMath();

    series1->append(1,count.lower_six_math);
    series1->append(2,count.six_seven_math);
    series1->append(3,count.seven_eight_math);
    series1->append(4,count.eight_night_math);
    series1->append(5,count.night_ten_math);


    series2->append(1,count.lower_six_programming);
    series2->append(2,count.six_seven_programming);
    series2->append(3,count.seven_eight_programming);
    series2->append(4,count.eight_night_programming);
    series2->append(5,count.night_ten_programming);

    chart->addSeries(series1);
    chart->addSeries(series2);

    QScatterSeries *scatterSeries1 = new QScatterSeries();
    scatterSeries1->setPointLabelsFormat("@yPoint");
    scatterSeries1->setPointLabelsVisible();
    scatterSeries1->setMarkerSize(6);
    // *scatterSeries1 << QPointF(0,6);
    scatterSeries1->append(1,count.lower_six_math);
    scatterSeries1->append(2,count.six_seven_math);
    scatterSeries1->append(3,count.seven_eight_math);
    scatterSeries1->append(4,count.eight_night_math);
    scatterSeries1->append(5,count.night_ten_math);

    QScatterSeries *scatterSeries2 = new QScatterSeries();
    scatterSeries2->setPointLabelsFormat("@yPoint");
    scatterSeries2->setPointLabelsVisible();
    scatterSeries2->setMarkerSize(6);
    scatterSeries2->append(1,count.lower_six_programming);
    scatterSeries2->append(2,count.six_seven_programming);
    scatterSeries2->append(3,count.seven_eight_programming);
    scatterSeries2->append(4,count.eight_night_programming);
    scatterSeries2->append(5,count.night_ten_programming);

    chart->addSeries(scatterSeries1);
    chart->addSeries(scatterSeries2);

    chart->legend()->hide();//隐藏legend(图例)

    //设置动画效果
    chart->setAnimationOptions(QChart::AllAnimations);

    chart->createDefaultAxes();// 设置网格
    chart->axes(Qt::Horizontal).first()->setRange(0, 6);//设置x轴范围
    chart->axes(Qt::Vertical).first()->setRange(0, 30);//设置y轴范围

    QStringList categories;
    categories << "0-60" << "60-70" << "70-80" << "80-90" << "90-100";

    QBarCategoryAxis *axis = new QBarCategoryAxis();
    axis->append(categories);//添加横坐标

    //在标签和轴之间加空格
    QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
    Q_ASSERT(axisY);
    //axisY->setLabelFormat("%.1f  ");

    chart->setTheme(QChart::ChartThemeBlueIcy);
    return chart;
}

效果图

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值