#include "gradsmodel.h" #include "qjsonarray.h" #include "qjsonobject.h" GradsTableModel::GradsTableModel(QObject *parent) : QAbstractTableModel(parent) {} void GradsTableModel::loadJsonData(const QJsonArray &jsonArray) { QList studentList; for (const QJsonValue &value : jsonArray) { if (value.isObject()) { QJsonObject obj = value.toObject(); Student student; student.name = obj.value("name").toString(); student.swID = obj.value("swID").toString(); student.examineeNumber = obj.value("examineeNumber").toString(); student.examName = obj.value("examName").toString(); student.checkinNumber = obj.value("checkinNumber").toString(); student.groupName = obj.value("groupName").toString(); student.answerTime = obj.value("exam_time").toInt(); student.answerFileName = obj.value("answerFileName").toString(); student.school = obj.value("school").toString(); student.exam_room = obj.value("exam_room").toString(); student.exam_sessions = obj.value("exam_sessions").toString(); studentList.append(student); } } beginResetModel(); students = studentList; endResetModel(); } int GradsTableModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return students.size(); } int GradsTableModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return COLUMNSIZE; } QVariant GradsTableModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.row() >= students.size() || index.row() < 0) return QVariant(); int column = index.column(); const auto &student = students.at(index.row()); if (role == Qt::DisplayRole) { switch ((columnRole) column) { case NAME: return student.name; case SWID: return student.swID; case EXAMINEENUMBER: return student.examineeNumber; case EXAMNAME: return student.examName; case CHECKINNUMBER: return student.checkinNumber; case GROUPNAME: return student.groupName; case ANSWERTIME: { double formattedNumber = student.answerTime / 1000.0; return QString::number(formattedNumber, 'f', 3); } case ANSWERFILENAME: return student.answerFileName; case SCHOOL: return student.school; case EXAM_ROOM: return student.exam_room; case EXAM_SESSIONS: return student.exam_sessions; case COLUMNSIZE: break; } } return QVariant(); } QVariant GradsTableModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) return QVariant(); if (orientation == Qt::Horizontal) { switch ((columnRole) section) { case NAME: return tr("name"); case SWID: return tr("SW_ID"); case EXAMINEENUMBER: return tr("examinee number"); case ANSWERTIME: return tr("answer time"); case ANSWERFILENAME: return tr("answer file name"); case SCHOOL: return tr("school"); case EXAMNAME: return tr("exam name"); case CHECKINNUMBER: return tr("checkin number"); case GROUPNAME: return tr("group name"); case EXAM_ROOM: return tr("exam room"); case EXAM_SESSIONS: return tr("exam number"); break; case COLUMNSIZE: break; } } return QVariant(); } Qt::ItemFlags GradsTableModel::flags(const QModelIndex &index) const { Qt::ItemFlags flags = QAbstractTableModel::flags(index); if (index.isValid() && index.column() == 0) { flags |= Qt::ItemIsUserCheckable; } return flags; }