How to delete all rows from QTableWidget

核能气质少年 提交于 2019-12-02 20:11:48

Just set the row count to 0 with:

mTestTable->setRowCount(0);

it will delete the QTableWidgetItems automatically, by calling removeRows as you can see in QTableWidget internal model code:

void QTableModel::setRowCount(int rows)
{
    int rc = verticalHeaderItems.count();
    if (rows < 0 || rc == rows)
        return;
    if (rc < rows)
        insertRows(qMax(rc, 0), rows - rc);
    else
        removeRows(qMax(rows, 0), rc - rows);
}

I don't know QTableWidget but your code seems to have a logic flaw. You are forgetting that as you go round the loop you are decreasing the value of mTestTable->rowCount(). After you have removed one row, i will be one and mTestTable->rowCount() will also be one, so your loop stops.

I would do it like this

while (mTestTable->rowCount() > 0)
{
    mTestTable->removeRow(0);
}
damkrat

AFAIK setRowCount(0) removes nothing. Objects are still there, but no more visible.

yourtable->model()->removeRows(0, yourtable->rowCount());
QTableWidget test;
test.clear();
test.setRowCount( 0);

The simple way to delete rows is to set the row count to zero. This uses removeRows() internally.

table->setRowCount(0);

You could also clear the content and then remove all rows.

table->clearContents();
table->model()->removeRows(0, table->rowCount());

Both snippets leave the headers untouched!

If you need to get rid of headers, too, you could switch from clearContents() to clear().

In order to prevent an app crash, disconnect all signals from the QTableView.

// Deselects all selected items
ui->tableWidget->clearSelection();

// Disconnect all signals from table widget ! important !
ui->tableWidget->disconnect();

// Remove all items
ui->tableWidget->clearContents();

// Set row count to 0 (remove rows)
ui->tableWidget->setRowCount(0);

Your code does not delete last row.

Try this one.

int totalRow = mTestTable->rowCount();
for ( int i = 0; i < totalRow ; ++i )
{
       mTestTable->removeRow(i);
}

In your code, on the first time, rowCount() have value 2 and value of the i is 0, so its delete 1st row,

But on the second time value of i incremented with 1, but rowCount() return the updated row count which is now 1, so, it does not delete the last row.

Hope now you ll be clear.

Removes all items not in the headers from the view. This will also remove all selections. The table dimensions stay the same.

void QTableWidget::clearContents()

Removes all items in the view. This will also remove all selections and headers.

void QTableWidget::clear()
d.danailov

Look this post : http://forum.qt.io/topic/1715/qtablewidget-how-to-delete-a-row

QList<QTableWidgetItem*> items = table.findItems(.....);
QMap<int, int> rowsMap;
for(int i = 0; i < items.count(); i++{
  rowsMap[items.at(i).row()] = -1; //garbage value
}
QList<int> rowsList = rowsMap.uniqueKeys();
qSort(rowsList);

//Now go through your table and delete rows in descending order as content would shift up and hence cannot do it in ascending order with ease.
for(int i = rowList.count() - 1; i >= 0; i--){
  table.removeRow(rowList.at(i));
}

You can just add empty item model (QStandardItemModel) to your QTableView (myTableView):

itemModel = new QStandardItemModel;
ui->myTableView->setModel(itemModel);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!