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

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

1)在Qt Creator的项目文件(.pro文件)中添加对Qt Charts模块的支持:
cpp 复制代码
QT += charts
2)在 AthleteModel.h 中添加
cpp 复制代码
public:
    // 获取所有运动员的列表
    std::vector<Athlete> getAthletes() const;
3)在athletemodel.cpp的最后添加
cpp 复制代码
std::vector<Athlete> AthleteModel::getAthletes() const {
    std::vector<Athlete> athletesList;
    for (int row = 0; row < rowCount(); ++row) {
        Athlete athlete;
        athlete.name = item(row, 0)->text().toStdString();
        for (int col = 1; col <= 6; ++col) {  // 假设前6列是成绩
            athlete.scores[col - 1] = item(row, col)->text().toFloat();
        }
        athlete.totalScore = item(row, 7)->text().toFloat();  // 假设第7列是总分
        athletesList.push_back(athlete);
    }
    return athletesList;
}
3)需要确保UI中有一个Tool Button按钮,命名为actionBtn
4)在mainwindow.cpp中添加按钮以及其槽函数
cpp 复制代码
//其他内容....
#include <QtCharts>
using namespace QtCharts;

//其他代码....

    
    QAction* actBtn = new QAction(QIcon(":/ZXT.png"), "折线图");
    ui->actionBtn->setDefaultAction(actBtn);
    connect(ui->actionBtn, &QToolButton::triggered, this, [=]() {
        QChart *chart = new QChart();
        chart->setTitle("运动员成绩折线图");
        chart->legend()->setVisible(true);
        chart->legend()->setAlignment(Qt::AlignBottom);
        // 获取所有运动员的列表
        auto athletes = model->getAthletes();
        for (const auto &athlete : athletes) {
            QLineSeries *series = new QLineSeries();
            series->setName(QString::fromStdString(athlete.name));
            for (int i = 0; i < 6; ++i) { // 假设有6次成绩
                series->append(i + 1, athlete.scores[i]); // 添加每次成绩到序列
            }
            chart->addSeries(series);
        }
        chart->createDefaultAxes();
        if (!athletes.empty()) {
            // 假设所有运动员至少有一次成绩,设置水平轴范围为1到6
            chart->axes(Qt::Horizontal).first()->setRange(1, 6);
            // 这里需要确定垂直轴的合适范围
            float maxScore = 0;
            float minScore = 200;
            for (const auto &athlete : athletes) {
                for (float score : athlete.scores) {
                    if (score > maxScore) maxScore = score;
                    if (score < minScore) minScore = score;
                }
            }
            chart->axes(Qt::Vertical).first()->setRange(minScore, maxScore);
        }
        QChartView *chartView = new QChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);

        // 创建一个新窗口显示这个图表
        QMainWindow *chartWindow = new QMainWindow();
        chartWindow->setCentralWidget(chartView);
        chartWindow->resize(1000, 500);
        chartWindow->setWindowIcon(QIcon(":/ZXT.png"));
        chartWindow->setWindowTitle("成绩折线图");
        chartWindow->show();
    });
    ui->actionBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);


//其他代码....

5)最后导出安装

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

复制代码
windeployqt study_Qt.exe

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

相关推荐
岑梓铭16 分钟前
考研408《计算机组成原理》复习笔记,第五章(2)——CPU指令执行过程
笔记·考研·408·计算机组成原理·计组
七七&5561 小时前
2024年08月13日 Go生态洞察:Go 1.23 发布与全面深度解读
开发语言·网络·golang
java坤坤1 小时前
GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
开发语言·后端·golang
元清加油1 小时前
【Golang】:函数和包
服务器·开发语言·网络·后端·网络协议·golang
健康平安的活着2 小时前
java之 junit4单元测试Mockito的使用
java·开发语言·单元测试
No0d1es2 小时前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
焄塰3 小时前
Ansible 管理变量和事实
学习·centos·ansible
DjangoJason3 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
oe10194 小时前
读From GPT-2 to gpt-oss: Analyzing the Architectural Advances(续)
笔记·gpt·学习
m0_480502644 小时前
Rust 入门 KV存储HashMap (十七)
java·开发语言·rust