#include "paramtable.h" #include ParamTable::ParamTable(QObject *parent) : QAbstractTableModel{parent} {} int ParamTable::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return m_data.size(); } int ParamTable::columnCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return 2; // Название и значение } QVariant ParamTable::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() >= m_data.size()) return QVariant(); ProjectParamModel *param = m_data.at(index.row()); if (!param) return QVariant(); if (role == Qt::DisplayRole || role == Qt::EditRole) { switch (index.column()) { case 0: // Название параметра return param->name(); case 1: // Значение параметра return param->value(); default: return QVariant(); } } return QVariant(); } QVariant ParamTable::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) return QVariant(); if (orientation == Qt::Horizontal) { switch (section) { case 0: return tr("Название"); case 1: return tr("Значение"); default: return QVariant(); } } return QVariant(); } bool ParamTable::setData(const QModelIndex &index, const QVariant &value, int role) { if (!index.isValid() || index.row() >= m_data.size() || role != Qt::EditRole) return false; ProjectParamModel *param = m_data.at(index.row()); if (!param) return false; bool changed = false; switch (index.column()) { case 0: // Название параметра if (param->name() != value.toString()) { param->setName(value.toString()); changed = true; } break; case 1: // Значение параметра if (param->value() != value.toString()) { param->setValue(value.toString()); changed = true; } break; } if (changed) { emit dataChanged(index, index); return true; } return false; } Qt::ItemFlags ParamTable::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::NoItemFlags; return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; } void ParamTable::addParam(ProjectParamModel *param) { if (!param) return; beginInsertRows(QModelIndex(), m_data.size(), m_data.size()); m_data.append(param); endInsertRows(); } void ParamTable::removeParam(int row) { if (row < 0 || row >= m_data.size()) return; beginRemoveRows(QModelIndex(), row, row); m_data.removeAt(row); endRemoveRows(); } void ParamTable::clear() { if (m_data.isEmpty()) return; beginResetModel(); m_data.clear(); endResetModel(); } ProjectParamModel* ParamTable::getParam(int row) const { if (row < 0 || row >= m_data.size()) return nullptr; return m_data.at(row); } QList ParamTable::getData() const { return m_data; } void ParamTable::setData(const QList &data) { beginResetModel(); m_data = data; endResetModel(); }