examsmodel.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "examsmodel.h"
  2. #include "qjsonarray.h"
  3. #include "qjsonobject.h"
  4. ExamsTableModel::ExamsTableModel(QObject *parent)
  5. : QAbstractTableModel(parent)
  6. {}
  7. void ExamsTableModel::loadJsonData(const QJsonArray &jsonArray)
  8. {
  9. QList<Exams> studentList;
  10. for (const QJsonValue &value : jsonArray) {
  11. if (value.isObject()) {
  12. QJsonObject obj = value.toObject();
  13. Exams exams;
  14. exams.id = obj.value("id").toInt();
  15. exams.name = obj.value("name").toString();
  16. exams.fileDir = obj.value("fileDir").toString();
  17. exams.select = (obj.value("isSelect").toInt() != 0);
  18. exams.maxTime = obj.value("maxTime").toInt();
  19. studentList.append(exams);
  20. }
  21. }
  22. beginResetModel();
  23. examsList = studentList;
  24. endResetModel();
  25. }
  26. int ExamsTableModel::rowCount(const QModelIndex &parent) const
  27. {
  28. Q_UNUSED(parent);
  29. return examsList.size();
  30. }
  31. int ExamsTableModel::columnCount(const QModelIndex &parent) const
  32. {
  33. Q_UNUSED(parent);
  34. return 4;
  35. }
  36. QVariant ExamsTableModel::data(const QModelIndex &index, int role) const
  37. {
  38. if (!index.isValid())
  39. return QVariant();
  40. if (index.row() >= examsList.size() || index.row() < 0)
  41. return QVariant();
  42. if (role == Qt::DisplayRole) {
  43. const auto &exams = examsList.at(index.row());
  44. if (index.column() == 0)
  45. return exams.name;
  46. else if (index.column() == 1)
  47. return exams.fileDir;
  48. else if (index.column() == 2)
  49. return exams.maxTime;
  50. else if (index.column() == 3)
  51. return exams.select;
  52. }
  53. return QVariant();
  54. }
  55. QVariant ExamsTableModel::headerData(int section, Qt::Orientation orientation, int role) const
  56. {
  57. if (role != Qt::DisplayRole)
  58. return QVariant();
  59. if (orientation == Qt::Horizontal) {
  60. switch (section) {
  61. case 0:
  62. return tr("name");
  63. case 1:
  64. return tr("fileDir");
  65. case 2:
  66. return tr("exams max time");
  67. case 3:
  68. return tr("select");
  69. default:
  70. return QVariant();
  71. }
  72. }
  73. return QVariant();
  74. }