我正在尝试删除QTableWidget中的所有行。这是我试过的。
for ( int i = 0; i < mTestTable->rowCount(); ++i )
{
mTestTable->removeRow(i);
}
我的桌子上有两排。但这只删了一行。原因可能是我没有创建具有固定表大小的表。 rowCount()的Qt文档说明了
此属性保存表中的行数。
默认情况下,对于没有行和列计数的表, 此属性包含值0。
因此,如果是这种情况,从表中删除所有行的最佳方法是什么?
答案 0 :(得分:70)
使用以下命令将行计数设置为0
mTestTable->setRowCount(0);
它将通过调用QTableWidgetItem
自动删除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);
}
答案 1 :(得分:28)
我不知道QTableWidget
但你的代码似乎有一个逻辑缺陷。你忘记了当你绕过循环时,你正在减少mTestTable->rowCount()
的值。删除一行后,i
将为1,mTestTable->rowCount()
也将为1,因此您的循环将停止。
我会这样做
while (mTestTable->rowCount() > 0)
{
mTestTable->removeRow(0);
}
答案 2 :(得分:11)
AFAIK setRowCount(0)
什么都没删除。物体仍在那里,但不再可见。
yourtable->model()->removeRows(0, yourtable->rowCount());
答案 3 :(得分:5)
QTableWidget test;
test.clear();
test.setRowCount( 0);
答案 4 :(得分:3)
删除行的简单方法是将行计数设置为零。这在内部使用removeRows()。
table->setRowCount(0);
您也可以清除内容,然后删除所有行。
table->clearContents();
table->model()->removeRows(0, table->rowCount());
这两个片段都没有触及标题!
如果您还需要删除标题,则可以从clearContents()
切换到clear()
。
答案 5 :(得分:2)
为了防止应用程序崩溃,请断开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);
答案 6 :(得分:0)
您的代码不会删除最后一行。
试试这个。
int totalRow = mTestTable->rowCount();
for ( int i = 0; i < totalRow ; ++i )
{
mTestTable->removeRow(i);
}
在您的代码中,第一次rowCount()
的值为2
,i
的值为0
,因此删除1
行,
但是第二次i
的值增加1
,但rowCount()
会返回更新的行数,现在为1,因此,它不会删除最后一行。< / p>
希望你现在明白了。
答案 7 :(得分:0)
看这篇文章: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));
}
答案 8 :(得分:0)
从视图中删除不在标题中的所有项目。这也将删除所有选择。桌面尺寸保持不变。
void QTableWidget::clearContents()
删除视图中的所有项目。这也将删除所有选择和标题。
void QTableWidget::clear()
答案 9 :(得分:0)
您只需将空项目模型(QStandardItemModel)添加到QTableView(myTableView):
itemModel = new QStandardItemModel;
ui->myTableView->setModel(itemModel);
答案 10 :(得分:0)
这对我有用:
for i in reversed(range(self.tableWidget.rowCount())):
self.tableWidget.removeRow(i)