本章介绍通过双击单元格,进入单元格,进行编辑,并对比是否修改了数据,如果修改了更新到数据库。
其他关于QTableWidget的操作,请查看上一篇文章《QTableWidget 用法-CSDN博客》
修改单元格内容,与原值比较,如果有变化,更新到数据库
需要将以下代码注释,否则不能双击单元格,进入编辑模式
绑定双击单元格修改事件
connect(ui->tableWidget,&QTableWidget::itemChanged,[=](QTableWidgetItem *item){
if(!item)
return;
int row = item->row();
int col = item->column();
qDebug()
});
需要创建一个变量,用于存储表格的原始数据,对比修改后的数据用,单元格所在的行和列为Key,单元格中的数据为value
QMap<QPair<int, int>, QString> originalValuesMap;
以下代码在初始化表格内数据完成时,写在最后边即可
for (int row = 0; row < ui->tableWidget->rowCount(); ++row) {
for (int col = 0; col < ui->tableWidget->columnCount(); ++col) {
originalValuesMap[qMakePair(row, col)] = ui->tableWidget->item(row,col)->text();
}
}
实现编辑及保存
connect(ui->tableWidget,&QTableWidget::itemChanged,[=](QTableWidgetItem *item){
if(!item)
return;
int row = item->row();
int col = item->column();
qDebug()
//取单元格原来的数据
QString originalValue = originalValuesMap[qMakePair(row, col)];
//本次修改完的数据
QString newValue = item->text();
qDebug()
//如果数据被修改
if(originalValue!=newValue)
{
// 根据行和列更新数据库中的值
// 请根据你的数据库连接和表结构进行实际实现
// 示例:假设表名为 YourTable,列名为 Column1 和 Column2
QSqlQuery query;
query.prepare("UPDATE YourTable SET Column" + QString::number(col + 1) + " = :value WHERE ID = :id");
query.bindValue(":value", newValue);
query.bindValue(":id", row + 1);
query.exec();
}
});