gradsmodel.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #include "gradsmodel.h"
  2. #include "qjsonarray.h"
  3. #include "qjsonobject.h"
  4. GradsTableModel::GradsTableModel(QObject *parent)
  5. : QAbstractTableModel(parent)
  6. {}
  7. void GradsTableModel::loadJsonData(const QJsonArray &jsonArray)
  8. {
  9. QList<Student> studentList;
  10. for (const QJsonValue &value : jsonArray) {
  11. if (value.isObject()) {
  12. QJsonObject obj = value.toObject();
  13. Student student;
  14. student.name = obj.value("name").toString();
  15. student.swID = obj.value("swID").toString();
  16. student.examineeNumber = obj.value("examineeNumber").toString();
  17. student.examName = obj.value("examName").toString();
  18. student.checkinNumber = obj.value("checkinNumber").toString();
  19. student.groupName = obj.value("groupName").toString();
  20. student.answerTime = obj.value("exam_time").toInt();
  21. student.answerFileName = obj.value("answerFileName").toString();
  22. student.school = obj.value("school").toString();
  23. student.exam_room = obj.value("exam_room").toString();
  24. student.exam_sessions = obj.value("exam_sessions").toString();
  25. studentList.append(student);
  26. }
  27. }
  28. beginResetModel();
  29. students = studentList;
  30. endResetModel();
  31. }
  32. int GradsTableModel::rowCount(const QModelIndex &parent) const
  33. {
  34. Q_UNUSED(parent);
  35. return students.size();
  36. }
  37. int GradsTableModel::columnCount(const QModelIndex &parent) const
  38. {
  39. Q_UNUSED(parent);
  40. return COLUMNSIZE;
  41. }
  42. QVariant GradsTableModel::data(const QModelIndex &index, int role) const
  43. {
  44. if (!index.isValid())
  45. return QVariant();
  46. if (index.row() >= students.size() || index.row() < 0)
  47. return QVariant();
  48. int column = index.column();
  49. const auto &student = students.at(index.row());
  50. if (role == Qt::DisplayRole) {
  51. switch ((columnRole) column) {
  52. case NAME:
  53. return student.name;
  54. case SWID:
  55. return student.swID;
  56. case EXAMINEENUMBER:
  57. return student.examineeNumber;
  58. case EXAMNAME:
  59. return student.examName;
  60. case CHECKINNUMBER:
  61. return student.checkinNumber;
  62. case GROUPNAME:
  63. return student.groupName;
  64. case ANSWERTIME: {
  65. double formattedNumber = student.answerTime / 1000.0;
  66. return QString::number(formattedNumber, 'f', 3);
  67. }
  68. case ANSWERFILENAME:
  69. return student.answerFileName;
  70. case SCHOOL:
  71. return student.school;
  72. case EXAM_ROOM:
  73. return student.exam_room;
  74. case EXAM_SESSIONS:
  75. return student.exam_sessions;
  76. case COLUMNSIZE:
  77. break;
  78. }
  79. }
  80. return QVariant();
  81. }
  82. QVariant GradsTableModel::headerData(int section, Qt::Orientation orientation, int role) const
  83. {
  84. if (role != Qt::DisplayRole)
  85. return QVariant();
  86. if (orientation == Qt::Horizontal) {
  87. switch ((columnRole) section) {
  88. case NAME:
  89. return tr("name");
  90. case SWID:
  91. return tr("SW_ID");
  92. case EXAMINEENUMBER:
  93. return tr("examinee number");
  94. case ANSWERTIME:
  95. return tr("answer time");
  96. case ANSWERFILENAME:
  97. return tr("answer file name");
  98. case SCHOOL:
  99. return tr("school");
  100. case EXAMNAME:
  101. return tr("exam name");
  102. case CHECKINNUMBER:
  103. return tr("checkin number");
  104. case GROUPNAME:
  105. return tr("group name");
  106. case EXAM_ROOM:
  107. return tr("exam room");
  108. case EXAM_SESSIONS:
  109. return tr("exam number");
  110. break;
  111. case COLUMNSIZE:
  112. break;
  113. }
  114. }
  115. return QVariant();
  116. }
  117. Qt::ItemFlags GradsTableModel::flags(const QModelIndex &index) const
  118. {
  119. Qt::ItemFlags flags = QAbstractTableModel::flags(index);
  120. if (index.isValid() && index.column() == 0) {
  121. flags |= Qt::ItemIsUserCheckable;
  122. }
  123. return flags;
  124. }