我试图删除从所有行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
的和值i
是0
,因此,其删除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