Всем привет, столкнулся с такой проблемой.
Редактирую данные модели через QDataWidgetMapper.
После того как сделал все приготовления, соединяю поля модели и вид:
QSqlTableModel *modelTask = model->relationModel(model->fieldIndex("task_name"));
ui->task->setModel(modelTask);
ui->task->setModelColumn(modelTask->fieldIndex("name"));
QSqlTableModel *modelCar = model->relationModel(model->fieldIndex("car_name"));
ui->car->setModel(modelCar);
ui->car->setModelColumn(modelCar->fieldIndex("name"));
//....
mapper->setModel(model);
mapper->setItemDelegate(new QSqlRelationalDelegate(this));
mapper->addMapping(ui->dateEdit,model->fieldIndex("date"));
mapper->addMapping(ui->task,model->fieldIndex("task_name"));
mapper->addMapping(ui->car,model->fieldIndex("car_name"));
mapper->addMapping(ui->car,model->fieldIndex("car_name"));
mapper->addMapping(ui->task,model->fieldIndex("task_name"));
iCast, можно предположить, что model->fieldIndex("car_name") и model->fieldIndex("task_name") возвращают одинаковые значения. Проверь
qDebug() <<model->fieldIndex("task_name") << model->fieldIndex("car_name"); // 5 2
void MainWindow::updateListAuto()
{
modelListAuto = new QSqlRelationalTableModel(viewListAuto);
modelListAuto->setTable("list_cars");
modelListAuto->setEditStrategy(QSqlTableModel::OnFieldChange);
modelListAuto->setJoinMode(QSqlRelationalTableModel::LeftJoin);
modelListAuto->setRelation(modelListAuto->fieldIndex("car_id"), QSqlRelation("cars", "id", "name AS car_name"));
modelListAuto->setRelation(modelListAuto->fieldIndex("task_id"), QSqlRelation("tasks", "id", "name AS task_name"));
modelListAuto->select();
viewListAuto->setModel(modelListAuto);
viewListAuto->show();
}
..
{
QModelIndex index = viewListAuto->selectionModel()->currentIndex();
ListAuto * dlg = new ListAuto(this,"edit"); // диалоговое окно с редактированием
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->setModel(modelListAuto);//отправляем модель
dlg->mapper->setCurrentModelIndex(index);//текущий индекс
dlg->exec();
}
..
void ListAuto::setModel(QSqlRelationalTableModel *model)
{
QSqlTableModel *modelTask = model->relationModel(model->fieldIndex("task_name"));
ui->task->setModel(modelTask);
ui->task->setModelColumn(modelTask->fieldIndex("name"));
QSqlTableModel *modelCar = model->relationModel(model->fieldIndex("car_name"));
ui->car->setModel(modelCar);
ui->car->setModelColumn(modelCar->fieldIndex("name"));
mapper->setModel(model);
mapper->setItemDelegate(new QSqlRelationalDelegate(this));
mapper->addMapping(ui->dateEdit,model->fieldIndex("date"));
mapper->addMapping(ui->task,model->fieldIndex("task_name"));
mapper->addMapping(ui->car,model->fieldIndex("car_name"));
}
void ListAuto::done(int r)
{
if(QDialog::Accepted == r) {
if(_mode == "add" and mapper->submit()) {
QDialog::done(r);
return;
}
else if(_mode == "edit" and mapper->submit() ){
QDialog::done(r);
return;
}
else {
QMessageBox::critical(this,tr("Error"),tr("Error %1 list").arg(_mode == "add" ? "adding" : "editing"));
return;
}
}
else {
QDialog::done(r);
return;
}
}
//mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)