| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #include "studentmodel.h"
- #include "qjsonarray.h"
- #include "qjsonobject.h"
- StudentTableModel::StudentTableModel(QObject *parent)
- : QAbstractTableModel(parent)
- {}
- void StudentTableModel::loadJsonData(const QJsonArray &jsonArray)
- {
- QList<Student> 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;
- }
|