簡體   English   中英

"如何從 QTableWidget 中刪除所有行"

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM