#include "projectparamtablemodel.h" #include ProjectParamTableModel::ProjectParamTableModel(QObject *parent) : QAbstractTableModel{parent} {} int ProjectParamTableModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return m_data.size(); } int ProjectParamTableModel::columnCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return 2; // Название и значение } QVariant ProjectParamTableModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() >= m_data.size()) return QVariant(); const ProjectParamTableData ¶m = m_data.at(index.row()); 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 ProjectParamTableModel::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 ProjectParamTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (!index.isValid() || index.row() >= m_data.size() || role != Qt::EditRole) return false; ProjectParamTableData ¶m = m_data[index.row()]; bool changed = false; switch (index.column()) { case 0: // Название параметра if (param.name != value.toString()) { param.name = value.toString(); changed = true; } break; case 1: // Значение параметра if (param.value != value.toString()) { param.value = value.toString(); changed = true; } break; } if (changed) { emit dataChanged(index, index); return true; } return false; } Qt::ItemFlags ProjectParamTableModel::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::NoItemFlags; return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; } void ProjectParamTableModel::setProjectParams(const QList ¶ms) { qDebug() << "ProjectParamTableModel: устанавливаем" << params.size() << "параметров"; beginResetModel(); m_data = params; endResetModel(); qDebug() << "ProjectParamTableModel: модель обновлена, теперь содержит" << m_data.size() << "параметров"; } void ProjectParamTableModel::addProjectParam(const ProjectParamTableData ¶m) { beginInsertRows(QModelIndex(), m_data.size(), m_data.size()); m_data.append(param); endInsertRows(); } void ProjectParamTableModel::removeProjectParam(int row) { if (row < 0 || row >= m_data.size()) return; beginRemoveRows(QModelIndex(), row, row); m_data.removeAt(row); endRemoveRows(); } void ProjectParamTableModel::clear() { if (m_data.isEmpty()) return; beginResetModel(); m_data.clear(); endResetModel(); } ProjectParamTableData ProjectParamTableModel::getProjectParam(int row) const { if (row < 0 || row >= m_data.size()) return ProjectParamTableData(); return m_data.at(row); } QList ProjectParamTableModel::getData() const { return m_data; } QMap ProjectParamTableModel::getDataAsMap() const { QMap result; for (const ProjectParamTableData ¶m : m_data) { result[param.name] = param.value; } return result; }