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;
}
效果图