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

时间:2016-07-10 20:10:41

标签: qt qtableview qtablewidget

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

  1. 专栏"数学"和"物理"是供用户输入数字,列#34;平均值"不能被赋予价值,它只是用于在用户放置"数学"之后显示平均值。和"物理"年级。如何禁用编辑但仍显示列中的计算值"平均值"

  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);
    
  3. 有这样的消息

    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 个答案:

答案 0 :(得分:2)

  1. 您可以使用QTableWidgetItem::setFlags()。要保留其他默认标志,请删除Qt::ItemIsEditable

    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
    
  2. 您无法将相同的QTableWidgetItem实例设置为多个单元格。为了帮助您入门:

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