Qt C++ 从表视图的选定行中获取数据

Qt C++ Get data from a selected row of a table view

本文关键字:获取 数据 C++ 视图 Qt      更新时间:2023-10-16

>我有一个表视图,其中填充了存储在QList<Vehicle> cars中的Vehicle对象的数据;在这个cars列表中,我必须执行一些操作:搜索、添加、编辑、删除;每次执行搜索操作后,我都会将建立的对象存储在另一个列表中,以仅使用此对象填充表视图,从而保持原始列表不变。原始列表仅在添加、编辑或删除时被修改。问题来了:我搜索要编辑的对象,它显示在表格视图中,我选择它并按编辑按钮;我正在使用QModelIndexList来获取行的索引。该行的索引将为我提供"已建立"列表中的位置,我需要修改原始列表中的对象。下面是我的实现。没有临时清单,还有其他方法吗?如何使用迭代器而不是 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);

}

可能是您使用代理模型并且需要调用mapToSource?