Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于单元格名称替换QTableWidget中的行_C++_Qt_Qtablewidget - Fatal编程技术网

C++ 基于单元格名称替换QTableWidget中的行

C++ 基于单元格名称替换QTableWidget中的行,c++,qt,qtablewidget,C++,Qt,Qtablewidget,假设我有一个QTableWidget,看起来像这样: __| columnname1 | columnname2 1 | name1 | value1 2 | name2 | value2 3 | name3 | value3 4 | name4 | value4 ui->tableWidget->setColumnCount(2); ui->tableWidget->setSortingEnabled(false); u

假设我有一个QTableWidget,看起来像这样:

__| columnname1 | columnname2
1 | name1       | value1
2 | name2       | value2
3 | name3       | value3
4 | name4       | value4
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);
我用这个代码创建的:

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所在的整行?

首先,您要为每一行调用一些函数,这些行对于整个表只需要调用一次。相反,您的代码示例应该更像这样:

__| columnname1 | columnname2
1 | name1       | value1
2 | name2       | value2
3 | name3       | value3
4 | name4       | value4
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());
}
//首先找到行“name2”的行索引:
int rowIdx=-1;
对于(inti=0;itableWidget->rowCount();i++){
如果(ui->tableWidget->item(i,0)->text()=“name2”){
rowIdx=i;
打破
}
}
如果(rowIdx>=0){
//然后更换该项目:
ui->tableWidget->setItem(rowIdx,1,新的QTableWidgetItem(value.toString());
//或替换数据:
ui->tableWidget->item(rowIdx,1)->setText(value.toString());
}

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

看,我不知道为什么,但当我使用这个代码时,我想更改的整行都被删除了。你的意思是删除或清除(空字段)?你用了哪种方法
new QTableWidgetItem
setText
?已清除,抱歉,我的坏消息。我使用了与您提供的代码相同的代码,并根据我的需要进行了一些调整。。所以:``int rowIdx=-1;int i;对于(i=0;itableWidget->rowCount();i++){if(ui->tableWidget->item(i,0)->text()==keys.first()){rowIdx=i;break;}}}if(rowIdx>=0){ui->tableWidget->setItem(rowidget,1,新的QTableWidgetItem(value.toString());//替换项ui->tableWidget->item(i,0)->setText(value.toString());//替换数据}``我的示例中有一个bug。但是你也放弃了我的评论:要么替换项目,要么替换数据。两个都做是没有必要的。此外,您还需要调试代码,并查看
value
是否实际包含内容。