1.只有两列的
#pragma once
#include <QAbstractTableModel>
#include <QObject>
class DistanceMeasureMeanModel : public QAbstractTableModel {
Q_OBJECT
public:
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();
}
// 根据行号获取测距仪的ID
int key = _rowKeys.at(index.row());
// 处理不同角色
switch (role) {
case Qt::DisplayRole: {
// 根据列号返回不同的数据
switch (index.column()) {
case 0: // 第一列:显示仪器名称
return QString("测距仪 %1").arg(