Qt的QAbstractTableModel

发布于:2025-07-22 ⋅ 阅读:(19) ⋅ 点赞:(0)

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(

网站公告

今日签到

点亮在社区的每一天
去签到