当前位置:   article > 正文

C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(2)折线图显示

C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(2)折线图显示

对上一篇的工作C++学习笔记 | 基于Qt框架开发实时成绩显示排序系统1-CSDN博客继续优化,增加一个显示运动员每组成绩的折线图

1)在Qt Creator的项目文件(.pro文件)中添加对Qt Charts模块的支持:
QT += charts
2)在 AthleteModel.h 中添加 
  1. public:
  2. // 获取所有运动员的列表
  3. std::vector<Athlete> getAthletes() const;

3)在athletemodel.cpp的最后添加
  1. std::vector<Athlete> AthleteModel::getAthletes() const {
  2. std::vector<Athlete> athletesList;
  3. for (int row = 0; row < rowCount(); ++row) {
  4. Athlete athlete;
  5. athlete.name = item(row, 0)->text().toStdString();
  6. for (int col = 1; col <= 6; ++col) { // 假设前6列是成绩
  7. athlete.scores[col - 1] = item(row, col)->text().toFloat();
  8. }
  9. athlete.totalScore = item(row, 7)->text().toFloat(); // 假设第7列是总分
  10. athletesList.push_back(athlete);
  11. }
  12. return athletesList;
  13. }

3)需要确保UI中有一个Tool Button按钮,命名为actionBtn

4)在mainwindow.cpp中添加按钮以及其槽函数
  1. //其他内容....
  2. #include <QtCharts>
  3. using namespace QtCharts;
  4. //其他代码....
  5. QAction* actBtn = new QAction(QIcon(":/ZXT.png"), "折线图");
  6. ui->actionBtn->setDefaultAction(actBtn);
  7. connect(ui->actionBtn, &QToolButton::triggered, this, [=]() {
  8. QChart *chart = new QChart();
  9. chart->setTitle("运动员成绩折线图");
  10. chart->legend()->setVisible(true);
  11. chart->legend()->setAlignment(Qt::AlignBottom);
  12. // 获取所有运动员的列表
  13. auto athletes = model->getAthletes();
  14. for (const auto &athlete : athletes) {
  15. QLineSeries *series = new QLineSeries();
  16. series->setName(QString::fromStdString(athlete.name));
  17. for (int i = 0; i < 6; ++i) { // 假设有6次成绩
  18. series->append(i + 1, athlete.scores[i]); // 添加每次成绩到序列
  19. }
  20. chart->addSeries(series);
  21. }
  22. chart->createDefaultAxes();
  23. if (!athletes.empty()) {
  24. // 假设所有运动员至少有一次成绩,设置水平轴范围为1到6
  25. chart->axes(Qt::Horizontal).first()->setRange(1, 6);
  26. // 这里需要确定垂直轴的合适范围
  27. float maxScore = 0;
  28. float minScore = 200;
  29. for (const auto &athlete : athletes) {
  30. for (float score : athlete.scores) {
  31. if (score > maxScore) maxScore = score;
  32. if (score < minScore) minScore = score;
  33. }
  34. }
  35. chart->axes(Qt::Vertical).first()->setRange(minScore, maxScore);
  36. }
  37. QChartView *chartView = new QChartView(chart);
  38. chartView->setRenderHint(QPainter::Antialiasing);
  39. // 创建一个新窗口显示这个图表
  40. QMainWindow *chartWindow = new QMainWindow();
  41. chartWindow->setCentralWidget(chartView);
  42. chartWindow->resize(1000, 500);
  43. chartWindow->setWindowIcon(QIcon(":/ZXT.png"));
  44. chartWindow->setWindowTitle("成绩折线图");
  45. chartWindow->show();
  46. });
  47. ui->actionBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  48. //其他代码....


5)最后导出安装

参考这篇博文:
QT导出安装文件的方法(WIN和Andriod平台)_qt怎么导出项目-CSDN博客

windeployqt study_Qt.exe

我的下一篇博文对该程序继续优化,增加了保存按钮C++ Qt框架开发|基于Qt框架开发实时成绩显示排序系统(3) 保存表格数据-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/93773
推荐阅读
相关标签
  

闽ICP备14008679号