studentmodel.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #include "studentmodel.h"
  2. #include "qjsonarray.h"
  3. #include "qjsonobject.h"
  4. StudentTableModel::StudentTableModel(QObject *parent)
  5. : QAbstractTableModel(parent)
  6. {}
  7. void StudentTableModel::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.id = obj.value("id").toInt();
  15. student.name = obj.value("name").toString();
  16. student.swID = obj.value("swID").toString();
  17. student.examineeNumber = obj.value("examineeNumber").toString();
  18. student.examTest = obj.value("examTest").toString();
  19. student.checkinNumber = obj.value("checkinNumber").toString();
  20. student.groupName = obj.value("groupName").toString();
  21. student.maxTime = obj.value("maxTime").toInt();
  22. student.answerTime = obj.value("answerTime").toInt();
  23. student.answerFileName = obj.value("answerFileName").toString();
  24. student.state = obj.value("state").toString();
  25. student.school = obj.value("school").toString();
  26. studentList.append(student);
  27. }
  28. }
  29. beginResetModel();
  30. students = studentList;
  31. endResetModel();
  32. }
  33. int StudentTableModel::rowCount(const QModelIndex &parent) const
  34. {
  35. Q_UNUSED(parent);
  36. return students.size();
  37. }
  38. int StudentTableModel::columnCount(const QModelIndex &parent) const
  39. {
  40. Q_UNUSED(parent);
  41. return COLUMNSIZE;
  42. }
  43. QVariant StudentTableModel::data(const QModelIndex &index, int role) const
  44. {
  45. if (!index.isValid())
  46. return QVariant();
  47. if (index.row() >= students.size() || index.row() < 0)
  48. return QVariant();
  49. int column = index.column();
  50. const auto &student = students.at(index.row());
  51. if (role == Qt::DisplayRole) {
  52. switch ((columnRole) column) {
  53. case NAME:
  54. return student.name;
  55. case SWID:
  56. return student.swID;
  57. case EXAMINEENUMBER:
  58. return student.examineeNumber;
  59. case EXAMTEST:
  60. return student.examTest;
  61. case GROUPNUMBER:
  62. return student.checkinNumber;
  63. case GROUP_NAME:
  64. return student.groupName;
  65. case MAXTIME:
  66. return student.maxTime;
  67. case ANSWERTIME: {
  68. double formattedNumber = student.answerTime / 1000.0;
  69. return QString::number(formattedNumber, 'f', 3);
  70. }
  71. case SCHOOL:
  72. return student.school;
  73. case ANSWERFILENAME:
  74. return student.answerFileName;
  75. case STATE:
  76. return student.state;
  77. default:
  78. break;
  79. }
  80. }
  81. return QVariant();
  82. }
  83. QVariant StudentTableModel::headerData(int section, Qt::Orientation orientation, int role) const
  84. {
  85. if (role != Qt::DisplayRole)
  86. return QVariant();
  87. if (orientation == Qt::Horizontal) {
  88. switch ((columnRole) section) {
  89. case NAME:
  90. return tr("name");
  91. case SWID:
  92. return tr("SW_ID");
  93. case EXAMINEENUMBER:
  94. return tr("examinee number");
  95. case GROUPNUMBER:
  96. return tr("checkin number");
  97. case GROUP_NAME:
  98. return tr("group name");
  99. case STATE:
  100. return tr("state");
  101. case EXAMTEST:
  102. return tr("exams test");
  103. case MAXTIME:
  104. return tr("exams max time");
  105. case ANSWERTIME:
  106. return tr("answer time");
  107. case ANSWERFILENAME:
  108. return tr("answer file name");
  109. case SCHOOL:
  110. return tr("school");
  111. case COLUMNSIZE:
  112. break;
  113. }
  114. }
  115. return QVariant();
  116. }
  117. Qt::ItemFlags StudentTableModel::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. }