#include "studentmodel.h" #include "qjsonarray.h" #include "qjsonobject.h" StudentTableModel::StudentTableModel(QObject *parent) : QAbstractTableModel(parent) {} void StudentTableModel::loadJsonData(const QJsonArray &jsonArray) { QList studentList; for (const QJsonValue &value : jsonArray) { if (value.isObject()) { QJsonObject obj = value.toObject(); Student student; student.id = obj.value("id").toInt(); student.name = obj.value("name").toString(); student.swID = obj.value("swID").toString(); student.examineeNumber = obj.value("examineeNumber").toString(); student.examTest = obj.value("examTest").toString(); student.checkinNumber = obj.value("checkinNumber").toString(); student.groupName = obj.value("groupName").toString(); student.maxTime = obj.value("maxTime").toInt(); student.answerTime = obj.value("answerTime").toInt(); student.answerFileName = obj.value("answerFileName").toString(); student.state = obj.value("state").toString(); student.school = obj.value("school").toString(); studentList.append(student); } } beginResetModel(); students = studentList; endResetModel(); } int StudentTableModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return students.size(); } int StudentTableModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return COLUMNSIZE; } QVariant StudentTableModel::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 EXAMTEST: return student.examTest; case GROUPNUMBER: return student.checkinNumber; case GROUP_NAME: return student.groupName; case MAXTIME: return student.maxTime; case ANSWERTIME: { double formattedNumber = student.answerTime / 1000.0; return QString::number(formattedNumber, 'f', 3); } case SCHOOL: return student.school; case ANSWERFILENAME: return student.answerFileName; case STATE: return student.state; default: break; } } return QVariant(); } QVariant StudentTableModel::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 GROUPNUMBER: return tr("checkin number"); case GROUP_NAME: return tr("group name"); case STATE: return tr("state"); case EXAMTEST: return tr("exams test"); case MAXTIME: return tr("exams max time"); case ANSWERTIME: return tr("answer time"); case ANSWERFILENAME: return tr("answer file name"); case SCHOOL: return tr("school"); case COLUMNSIZE: break; } } return QVariant(); } Qt::ItemFlags StudentTableModel::flags(const QModelIndex &index) const { Qt::ItemFlags flags = QAbstractTableModel::flags(index); if (index.isValid() && index.column() == 0) { flags |= Qt::ItemIsUserCheckable; } return flags; }