在 QTableWidget 中禁用编辑和 setItem 到多行

disable editing and setItem to several rows in QTableWidget

| Name | Math | Physics | Average grade |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

  1. "math"和"physics"栏供用户填入数字,"average"栏不能填值,仅用于显示平均值用户输入 "math" 和 "physics" 评分后的值。我怎样才能禁用编辑但仍然在列 "average" 中显示计算值?

  2. 我想将内容写入多行,但我的代码不起作用

    ui->tableWidget->setColumnCount(4);
    ui->tableWidget->setRowCount(8);
    ui->tableWidget->setSortingEnabled(false);
    QTableWidgetItem *newItem = new QTableWidgetItem(tr("Hello World"));
    for (int i=0; i< ui->tableWidget->rowCount(); i++)
        ui->tableWidget->setItem(i, 0, newItem);
    

有这样一条消息

QTableWidget: cannot insert an item that is already owned by another QTableWidget

我还是不懂,因为我是QT新手。请帮助我,非常感谢! :)

代码已更新:

for (int i = 0; i < ui.tableWidget->rowCount(); i++) {
    QTableWidgetItem *icon_item = new QTableWidgetItem;
    QIcon icon(":/myproject/icon/test.png");
    icon_item->setIcon(icon);
    ui.tableWidget->setItem(i, 0, icon_item);
}

for (int j = 0; j < ui.tableWidget->rowCount(); j++) {
    ui.tableWidget->item(j, 3)->setFlags(ui.tableWidget->item(j, 3)->flags() & ~Qt::ItemIsEditable);
}
  1. 可以使用QTableWidgetItem::setFlags()。保留其他默认标志,但删除 Qt::ItemIsEditable:

    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
    
  2. 您不能将同一个 QTableWidgetItem 实例设置到多个单元格。入门指南:

    for (...) {
        QTableWidgetItem *item = new QTableWidgetItem(...);
        tableWidget->setItem(...);
    }