48

QTableWidgetからすべての行を削除しようとしています。これが私が試したものです。

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

テーブルに 2 つの行がありました。しかし、これは単一の行を削除しただけです。理由としては、固定テーブル サイズでテーブルを作成しなかったことが考えられます。rowCount()のQtドキュメントには、

このプロパティは、テーブル内の行数を保持します。

デフォルトでは、行数と列数を指定せずに作成されたテーブルの場合、このプロパティには値 0 が含まれます。

その場合、テーブルからすべての行を削除する最良の方法は何ですか?

4

12 に答える 12

104

次のように行数を 0 に設定するだけです。

mTestTable->setRowCount(0);

内部モデル コードでわかるようにQTableWidgetItem、呼び出しによって s が自動的に削除されます。removeRowsQTableWidget

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);
}
于 2013-04-06T10:33:17.450 に答える
13

AFAIKsetRowCount(0)は何も削除しません。オブジェクトはまだそこにありますが、見えなくなりました。

yourtable->model()->removeRows(0, yourtable->rowCount());
于 2014-04-03T11:37:39.480 に答える
8
QTableWidget test;
test.clear();
test.setRowCount( 0);
于 2014-10-16T17:14:38.753 に答える
3

アプリのクラッシュを防ぐために、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);
于 2015-07-22T13:26:38.270 に答える
1

この投稿を見てください: 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));
}
于 2013-04-06T07:13:55.383 に答える
0

ヘッダーにないすべてのアイテムをビューから削除します。これにより、すべての選択も削除されます。テーブルの寸法は同じままです。

void QTableWidget::clearContents()

ビュー内のすべてのアイテムを削除します。これにより、すべての選択とヘッダーも削除されます。

void QTableWidget::clear()
于 2015-06-01T08:01:35.730 に答える