我有一个表格视图,其中填充了存储在Vehicle
中的QList<Vehicle> cars
个对象的数据;在这个cars
列表中,我必须做一些动作:搜索,添加,编辑,删除;在每次搜索操作之后,我将已创建的对象存储在另一个列表中,仅使用此对象填充表视图,保持原始列表不变。只有在添加,编辑或删除时才会修改原始列表。问题出现了:我搜索了一个我要编辑的对象,它显示在表格视图中,我选择它并按下编辑按钮;我正在使用QModelIndexList
来获取行的索引。该行的索引将从“已创建”列表中给出我的位置,我需要修改原始列表中的对象。以下是我的实施。
没有临时名单,还有其他方法吗?如何使用Iterator修改原始对象,而不是for循环?
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);
}
答案 0 :(得分:0)
您可能使用代理模型,需要调用mapToSource吗?