我有一个具有以下设置的QTablewidget

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);

我试图删除用户选择的行并使用以下代码。但是,它会导致崩溃时选择和删除所有项目。以下方法正确吗?谢谢。
tableWidget->setSortingEnabled(false);
QList<QTableWidgetItem *> selectedEntries = tableWidget->selectedItems();
foreach(QTableWidgetItem * currentItem, selectedEntries)

{
if (currentItem->row()!=-1)
                      tableWidget->removeRow(currentItem->row());

}
tableWidget->setSortingEnabled(true);

最佳答案

这种操作的风格略有不同,可以在Nokia dev forums中找到,它是Ruzik提供的经过改进的形式。

 QSet<int> selectedRows; //we use a set to prevent doubles
 QList<QTableWidgetItem*> itemList = tableWidget->selectedItems();
 QTableWidgetItem * item;
 foreach(item, itemList)
 selectedRows.insert(item->row());
 //get a list, and sort it big to small
 QList<int> rows = selectedRows.toList();
 qSort(rows.begin(), rows.end());
 //now actually do the removing:
 foreach(int row, rows)
  tableWidget->removeRow(row);

10-08 09:47