c++ - 根据单元格名称替换 QTableWidget 中的一行

标签 c++ qt 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());
}

我没有编译这个示例代码,它可能有拼写错误或错误的函数名称,但你会明白的。

关于c++ - 根据单元格名称替换 QTableWidget 中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56751102/

相关文章:

Python - PyQt - QTable Widget - 添加行

c++ - 如何找到正确的托管代理来构建 Linux 代码?

c++ - 使用 std::forward 而不是 std::move 来初始化对象有什么好处吗?

c++ - 在c++中安排头文件

c++ - iOS 上的 Qt 蓝牙

qt - 如何将字符串添加到 QCombobox

python - 如何将列中的所有项目对齐到 QTableWidget 的中心

c++ - 好的或坏的 C++ 习语 - 对象纯粹用于构造函数/析构函数?

qt - 在 QT 中关闭窗口之前获取应用程序退出信号

python-2.7 - 如何清除 pyqt QTableWidget?