#ifndef RECORD_LIST_MODEL_H #define RECORD_LIST_MODEL_H #include #include #include #include #include #include #include // 考勤记录表格模型。QML 的 ListView/Table-like 布局通过 role 名称读取每列数据, // C++ 侧保留强类型 Item,避免界面层直接处理 QVariantMap。 class RecordListModel : public QAbstractListModel { Q_OBJECT public: // roleNames() 会把这些枚举映射为 timestamp、studentId、confidenceText 等 QML 字段。 enum Roles { TimestampRole = Qt::UserRole + 1, ClassIdRole, ClassNameRole, StudentIdRole, NameRole, ConfidenceRole, ConfidenceTextRole, StatusRole, StatusTextRole, SuccessRole }; // 函数作用:创建考勤记录列表模型实例,并准备给 QML 使用的字段角色。 explicit RecordListModel(QObject *parent = nullptr); // 函数作用:返回当前显示的考勤记录行数。 int rowCount(const QModelIndex &parent = QModelIndex()) const override; // 函数作用:根据行号和角色返回考勤时间、学号、姓名、班级、置信度和状态等字段。 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; // 函数作用:提供 QML 读取考勤记录字段所需的 role 名称映射。 QHash roleNames() const override; // Item 是已经完成映射后的显示数据:学号、姓名、班级名都由 AppController 处理好。 struct Item { QString timestamp; QString classId; QString className; QString studentId; QString name; double confidence = 0.0; QString status; bool success = false; }; // 函数作用:整体替换当前显示的考勤记录列表,并通知视图刷新。 void setItems(const QVector &items); private: QVector m_items; }; #endif