[英]How to delete all rows from QTableWidget
我正在嘗試從QTableWidget<\/a>中刪除所有行。 這是我嘗試過的。
for ( int i = 0; i < mTestTable->rowCount(); ++i )
{
mTestTable->removeRow(i);
}
只需使用以下命令將行數設置為 0:
mTestTable->setRowCount(0);
它將通過調用removeRows
自動刪除QTableWidgetItem
s,如您在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);
}
我不知道QTableWidget
但你的代碼似乎有一個邏輯缺陷。 您忘記了在循環時您正在減少mTestTable->rowCount()
的值。 刪除一行后, i
將是一並且mTestTable->rowCount()
也將是一,因此您的循環停止。
我會這樣做
while (mTestTable->rowCount() > 0)
{
mTestTable->removeRow(0);
}
AFAIK setRowCount(0)
刪除任何內容。 對象仍然存在,但不再可見。
yourtable->model()->removeRows(0, yourtable->rowCount());
QTableWidget test;
test.clear();
test.setRowCount( 0);
刪除行的簡單方法是將行數設置為零。 這在內部使用 removeRows()。
table->setRowCount(0);
您還可以清除內容,然后刪除所有行。
table->clearContents();
table->model()->removeRows(0, table->rowCount());
兩個片段都保持標題不變!
如果您也需要擺脫標題,您可以從clearContents()
切換到clear()
。
為了防止應用程序崩潰,請斷開 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);
看看這個帖子: 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));
}
您可以將空項目模型 (QStandardItemModel) 添加到您的 QTableView (myTableView):
itemModel = new QStandardItemModel;
ui->myTableView->setModel(itemModel);
您的代碼不會刪除最后一行。
試試這個。
int totalRow = mTestTable->rowCount();
for ( int i = 0; i < totalRow ; ++i )
{
mTestTable->removeRow(i);
}
在您的代碼中,第一次rowCount()
值為2
並且i
值為0
,因此它刪除1
行,
但是在i
的第二次值以1
遞增時, rowCount()
返回更新后的行數,現在為 1,因此,它不會刪除最后一行。
希望現在你會清楚。
從視圖中刪除不在標題中的所有項目。 這也將刪除所有選擇。 桌子尺寸保持不變。
void QTableWidget::clearContents()
刪除視圖中的所有項目。 這也將刪除所有選擇和標題。
void QTableWidget::clear()
這對我有用:
for i in reversed(range(self.tableWidget.rowCount())):
self.tableWidget.removeRow(i)
在
python<\/code>中,您只需將 rowCount 設置為零即可!
tableWidget.setRowCount(0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.