Vehicle
に格納されているオブジェクトのデータが取り込まれたテーブル ビューがありますQList<Vehicle> cars
。このcars
リストでは、いくつかのアクションを実行する必要があります: 検索、追加、編集、削除。検索のすべてのアクションの後、元のリストをそのまま維持して、このオブジェクトのみをテーブル ビューに入力するために、作成されたオブジェクトを別のリストに格納します。元のリストは、追加、編集、または削除時にのみ変更されます。ここで問題が発生します。編集したいオブジェクトを検索すると、テーブル ビューに表示されます。それを選択して、編集ボタンを押します。私は使っているQModelIndexList
行のインデックスを取得します。行のインデックスは、「設立された」リストからの位置を示します。元のリストのオブジェクトを変更する必要があります。以下は私の実装です。一時リストなしでこのことを行う他の方法はありますか? for ループの代わりに Iterator を使用して元のオブジェクトを変更するにはどうすればよいですか?
void MainWindow::on_actionEdit_triggered()
{
QMessageBox msgBox;
QModelIndexList id = ui->tableView->selectionModel()->selectedIndexes();
if(id.isEmpty()){
msgBox.setWindowTitle("Message");
msgBox.setText("Please select a row");
msgBox.setDefaultButton(QMessageBox::Ok);
msgBox.exec();
} else{
int row = id.at(0).row();
QUuid carId = temp.at(row).getVehicleID(); // temp -> the "the founded" list
for(int i = 0; i < cars.size(); i++){
Vehicle& current = cars[i];
Vehicle& currentTemp = temp[row];
if(carId == current.getVehicleID() && carId == currentTemp.getVehicleID()){
addDialog = new AddEditDialog(this);
addDialog->loadVehicleToEdit(current);
addDialog->exec();
if(addDialog->getIsEdited()){
current = addDialog->getVehicleToAdd();
currentTemp = addDialog->getVehicleToAdd();
currentTemp.setVehicleId(carId);
current.setVehicleId(carId);
}
}
}
}
//create header
createHeader(model);
//set data to the table view
populate(temp);
}