c++ - 根据单元格名称替换 QTableWidget 中的一行
问题描述
假设我有看起来像这样的 QTableWidget:
__| columnname1 | columnname2
1 | name1 | value1
2 | name2 | value2
3 | name3 | value3
4 | name4 | value4
我用这段代码创建的:
ui->tableWidget->setColumnCount(2);
foreach(const QString& key, keys)
{
value = jsonObj.value(key);
ui->tableWidget->sortItems(int (1),Qt::DescendingOrder);
int currRow = ui->tableWidget->rowCount();
ui->tableWidget->setSortingEnabled(false);
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
ui->tableWidget->setItem(currRow, 0, new QTableWidgetItem(key));
ui->tableWidget->setItem(currRow, 1, new QTableWidgetItem(value.toString()));
ui->tableWidget->setHorizontalHeaderLabels({"columnname1", "columnname2"});
ui->tableWidget->setSortingEnabled(true);
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
现在,例如,我有一个 name2 的新值,如何替换 name2 所在的整行?
解决方案
首先,您要为每一行调用一些函数,而这些函数只需要为整个表调用一次。相反,您的代码示例应该更像这样:
ui->tableWidget->setColumnCount(2);
ui->tableWidget->setSortingEnabled(false);
ui->tableWidget->setHorizontalHeaderLabels({"columnname1", "columnname2"});
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
foreach(const QString& key, keys)
{
value = jsonObj.value(key);
int currRow = ui->tableWidget->rowCount();
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
ui->tableWidget->setItem(currRow, 0, new QTableWidgetItem(key));
ui->tableWidget->setItem(currRow, 1, new QTableWidgetItem(value.toString()));
}
ui->tableWidget->sortItems(int (1),Qt::DescendingOrder);
ui->tableWidget->setSortingEnabled(true);
然后,如果“name2”行有新值,则只需替换该值。您已经知道如何做到这一点:
// first find the row index of row 'name2':
int rowIdx = -1;
for(int i = 0; i < ui->tableWidget->rowCount(); i++) {
if(ui->tableWidget->item(i, 0)->text() == "name2") {
rowIdx = i;
break;
}
}
if(rowIdx >= 0) {
// then EITHER replace the item:
ui->tableWidget->setItem(rowIdx, 1, new QTableWidgetItem(value.toString()));
// OR replace the data:
ui->tableWidget->item(rowIdx, 1)->setText(value.toString());
}
我没有编译这个示例代码,它可能有拼写错误或错误的函数名称,但你会明白的。
推荐阅读
- android - 在浮动操作按钮旁边添加标签
- flutter - Flutter - 覆盖容器高度问题
- node.js - 猫鼬填充自定义对象数组
- javascript - macOS 应用程序中的 WKWebView Web 检查器无法呈现和闪烁/闪烁
- java - Springboot+Hibernate 如何修复“传递给持久化的分离实体”
- java - 使用 currentTimeMillis() 比较 concat 和 append
- java - 数组[i] = scnr.nextInt(); 在线程“主”java.util.NoSuchElementException 中导致异常
- git - 如何恢复正常工作的 git 存储库?
- jspdf - 使用 jspdf autotable 绘制无标题表
- c# - 帮助解决 ASP.NET Core 3.1 应用程序中的“已经有一个打开的 DataReader 与此命令关联,必须先关闭”