1.只有两列的
#pragma once#include <QAbstractTableModel>
#include <QObject>
class DistanceMeasureMeanModel : public QAbstractTableModel {Q_OBJECTpublic:DistanceMeasureMeanModel(QObject* parent = nullptr);~DistanceMeasureMeanModel();private:QVariant data(const QModelIndex& index, int role) const override;int columnCount(const QModelIndex& parent = {}) const override;int rowCount(const QModelIndex& parent = {}) const override;QVariant headerData(int section, Qt::Orientation orientation, int role) const override;public:/*** @brief 设置测距仪个数* @param count*/void setRangeCount(int count);/*** @brief 添加或更新一个测距仪的测量数据* @param rangefinderId 测距仪的ID (从1开始)* @param data 测量数据*/void addMeasureData(int rangefinderId, double data);void updateAllData(const QMap<int, double>& newData);private:// 内部数据存储: key是测距仪ID, value是对应的测量数据QMap<int, double> _meanData;// 用于将行号映射到测距仪ID的列表,以确保稳定的行顺序QList<int> _rowKeys;// 表头标题QStringList _headers;
};#include "pch.h"#include "DistanceMeasureMeanModel.h"DistanceMeasureMeanModel::DistanceMeasureMeanModel(QObject* parent)
{// 初始化表头_headers << "仪器" << "数值(mm)";
}DistanceMeasureMeanModel::~DistanceMeasureMeanModel()
{
}QVariant DistanceMeasureMeanModel::data(const QModelIndex& index, int role) const
{// 检查索引是否有效if (!index.isValid() || index.row() >= _rowKeys.size()) {return QVariant();}// 根据行号获取测距仪的IDint key = _rowKeys.at(index.row());// 处理不同角色switch (role) {case Qt::DisplayRole: {// 根据列号返回不同的数据switch (index.column()) {case 0: // 第一列:显示仪器名称return QString("测距仪 %1").arg(