如何删除从QTableWidget的所有行(How to delete all rows from

2019-08-20 00:23发布

我试图删除从所有行QTableWidget的 。 以下是我试过了。

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

我在我的表有两行。 但是,这只是删除一行。 一个原因可能是因为我没有一个固定的表大小创建表。 Qt文档的rowCount时()说,

本属性表中的行数。

默认情况下,没有行和列数构成的表,此属性包含值为0。

所以,如果是这样的话,究竟是从表中删除所有行的最好方法?

Answer 1:

只需设置的行数为0,即:

mTestTable->setRowCount(0);

它会删除QTableWidgetItem自动S,通过调用removeRows ,你可以在看QTableWidget内部模型的代码:

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


Answer 2:

我不知道QTableWidget ,但你的代码似乎有一个逻辑缺陷。 你忘记了,你去一轮循环,你正在减少的值mTestTable->rowCount() 您已删除一行后, i将是一个和mTestTable->rowCount()也将是一个,所以你的循环停止。

我会做这样的

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


Answer 3:

据我所知setRowCount(0)删除什么。 对象是仍然存在,但没有更为明显。

yourtable->model()->removeRows(0, yourtable->rowCount());


Answer 4:

QTableWidget test;
test.clear();
test.setRowCount( 0);


Answer 5:

最简单的方法来删除行是行数设置为零。 这将使用removeRows()内部。

table->setRowCount(0);

你也可以清除的内容,然后删除所有行。

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

这两个片段离开头不变!

如果您需要摆脱头,也一样,你可以脱离clearContents()clear()



Answer 6:

为了防止应用程序崩溃,断开所有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);


Answer 7:

您的代码不会删除最后一行。

试试这个。

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

在代码中,在第一时间, rowCount()具有值2的和值i0 ,因此,其删除1第一行,

但在第二时间值i每次工作1 ,但rowCount()返回更新行数现在是1,因此,它不会删除的最后一行。

希望现在你就清楚了。



Answer 8:

不删除在视图中的标题所有项目。 这也将删除所有选择。 该表的尺寸保持不变。

void QTableWidget::clearContents()

删除视图中的所有项目。 这也将删除所有的选择和头。

void QTableWidget::clear()


Answer 9:

看看这篇文章: 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));
}


Answer 10:

你可以只添加空项目模型(QStandardItemModel)到您的QTableView中(myTableView):

itemModel = new QStandardItemModel;
ui->myTableView->setModel(itemModel);


文章来源: How to delete all rows from QTableWidget