bool TableModel::setData( const QModelIndex &index,const QVariant &value,int role){ qDebug() << "setData" << index << value.toString() << role; if (index.isValid() && role == Qt::EditRole) { switch(index.column()) { case 0: rec.name = value.toString(); break; case 1: rec.descr = value.toString(); break; case 2: rec.sum = value.toInt(); break; default: return false; } // оповещаем об изменении данных emit(dataChanged(index, index)); // данные приняты return true; } return false;}QVariant TableModel::data(const QModelIndex & index,int role) const{// выводим в консоль текущие значения параметров и считаем, сколько// раз вызывается метод TableModel::data и для каких ролей//qDebug() << "data" << index << role; QVariant result; // if (role == Qt::BackgroundRole && index.column() == 0) // return QColor(255,255,204); if (!index.isValid() || role != Qt::DisplayRole) return result; switch (index.column()){ case 0: result = rec.name; qDebug() << "name: " << result; break; case 1: result = rec.descr; qDebug() << "descr: " << result; break; case 2: result = rec.sum; qDebug() << "sum" << result; break; } return result;}Qt::ItemFlags TableModel::flags(const QModelIndex &index) const { Qt::ItemFlags result; if (!index.isValid()) return Qt::ItemIsEnabled; result = QAbstractTableModel::flags(index); result |= Qt::ItemIsEditable; return result; }
model = new TableModel(this); widgetMapper = new QDataWidgetMapper(this); widgetMapper->setModel(model); widgetMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit); //ManualSubmit); widgetMapper->addMapping(ui->lineEdit, 0, "text"); widgetMapper->addMapping(ui->lineEdit_2, 1, "text"); widgetMapper->addMapping(ui->spinBox, 2, "value"); widgetMapper->toFirst();