Files
bishe-QT/src/RecordListModel.h
T
2026-05-21 08:07:04 +08:00

63 lines
2.0 KiB
C++

#ifndef RECORD_LIST_MODEL_H
#define RECORD_LIST_MODEL_H
#include <QAbstractListModel>
#include <QByteArray>
#include <QHash>
#include <QModelIndex>
#include <QString>
#include <QVariant>
#include <QVector>
// 考勤记录表格模型。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<int, QByteArray> 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<Item> &items);
private:
QVector<Item> m_items;
};
#endif