gnase
gnase

Reputation: 638

disable editing and setItem to several rows in QTableWidget

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

  1. the column "math" and "physics" is for user to put number in, the column "average" CAN NOT be put value, it is only for showing average value after user put "math" and "physics" grade. How can i disable editing but still show calculated value in column "average" ?

  2. I want to write content to several rows, but my code does not work

    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);
    

There is a message like this

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

I still don't understand because i am a newbie with QT. Please help me, many thanks ! :)

Code updated:

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);
}

Upvotes: 2

Views: 11644

Answers (1)

jpnurmi
jpnurmi

Reputation: 5836

  1. You can use QTableWidgetItem::setFlags(). To keep the other default flags, but remove Qt::ItemIsEditable:

    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
    
  2. You cannot set the same QTableWidgetItem instance to multiple cells. To get you started:

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

Upvotes: 6

Related Questions