Unable to display items with QWidgetTable
-
I'm having a couple of issues with QWidgetTable, i've sectioned them in two lines.
- I'm unable to append items to a QWidgetTable, i've wrote the following code:
ui->Tabela->insertRow(ui->Tabela->rowCount()); ui->Tabela->setItem(ui->Tabela->rowCount(), 1, new QTableWidgetItem(_cod_produto)); ui->Tabela->setItem(ui->Tabela->rowCount(), 2, new QTableWidgetItem(_nome_produto)); ui->Tabela->setItem(ui->Tabela->rowCount(), 3, new QTableWidgetItem(_quantidade)); ui->Tabela->setItem(ui->Tabela->rowCount(), 4, new QTableWidgetItem(_quantidade_stock)); ui->Tabela->setItem(ui->Tabela->rowCount(), 5, new QTableWidgetItem(_preco));
But all it does is insert an empty row at the end. I thought setItem would append the item to the table. For extra info, the _cod_produto, _nome_produto, _quantidade and _quantidade_stock are QString's.
- I need to read values again from the table, i've wrote the following:
while(i++ < ui->Tabela->rowCount()){ qDebug() << "From table: " << ui->Tabela->item(i,0)->text() << endl; _cod_produto = ui->Tabela->item(i,0)->text(); _quantidade_stock = ui->Tabela->item(i,2)->text(); _quantidade = ui->Tabela->item(i,3)->text(); _preco = ui->Tabela->item(i,4)->text(); ... ... ...
They return empty, i assume because every row in the table is blank and not due to any mistake i made while reading those values.
I would be very thankful for any help possible with this, i apologise for my rudimentary skills with Qt beforehand, and thank you in advance for any help!
-
@Rust said:
ui->Tabela->insertRow(ui->Tabela->rowCount()); ui->Tabela->setItem(ui->Tabela->rowCount(), 1, new QTableWidgetItem(_cod_produto));
I did not try to compile your code but the last row has index
rowCount()-1
(index starts at 0), so yoursetItem(...)
-calls refer to an unexisting row (same for columns: your starting at index 1 - is this really what you want?). Try to callsetItem(ui->Tabela->setItem(ui->Tabela->rowCount()-1, ....)`;
-
Indeed i fixed that. QTableWidget now works as expected.
But now my problem is when i'm attempting to delete a row, iterating through all of them to find a matching field value to delete a row. My program crashes at the following loop...
qDebug() << "Now iterating through rows..." << endl; //iterate through indexes to remove item while(i <= ui->Tabela->rowCount()){ qDebug() << "Row: " << ui->Tabela->item(i,0)->text() << endl; qDebug() << "Current iteration index:" << i << endl; if(_cod_produto == (ui->Tabela->item(i,0)->text())){ QString _preco = ui->Tabela->item(i, 4)->text(); if(_preco.isEmpty()){ qDebug() << "Price is empty, will now return and ignore action" << endl; return; } QString _preco_total = ui->PrecoTotal->toPlainText(); _preco_total = QString::number(_preco_total.toInt() - _preco.toInt()); ui->PrecoTotal->clear(); ui->PrecoTotal->appendPlainText(_preco_total); ui->Tabela->removeRow(i); break; } i++; }
Now iterating through rows... is printed onto the console, but...
qDebug() << "Row: " << ui->Tabela->item(i,0)->text() << endl;
never gets to execute and everything crashes before it at
while(i <= ui->Tabela->rowCount()){
i is an int, rowCount() returns an int, or is it an unsigned it and it's because of that that everything's crashing?
Note: The table has values filled in when calling the loop.
-
@Rust said:
qDebug() << "Now iterating through rows..." << endl; //iterate through indexes to remove item while(i <= ui->Tabela->rowCount()){
Same problem: You're trying to access an unexisting row! Use operator
<
instead of<=
to ensure thati
is less than the rowCount and not "less or equal".
(And just to be sure: do you initializei = 0
before entering the while loop? this is missing in the example snippet above...) -
@Rust said:
Indeed it's missing, i set it to i = 1 before the loop. I'll give your hints a try.
You have to set it to 0 and increment until rowCount-1. The indexes start with 0 so the last row has index rowCount-1. (a table with 4 rows has a rowCount of 4 and the indexes 0, 1, 2, 3 - same way as arrays are indexed and accessed).