思路:
1.首先通过QTableWidget方法去获取选中的行。
2.对选中行进行排序(因为删除要从后往前删除行)。
3.进行表格行的删除。
注意事项:
1.删除行号一定要从后往前删除,不然你删除一行后表格的行数都变化了,你再删除程序就崩溃了。
2.不推荐使用这样获取方式:
QItemSelectionModel *selections = ui.fileTable->selectionModel(); //返回当前的选择模式
QModelIndexList selectedsList = selections->selectedIndexes(); //返回所有选定的模型项目索引列表
以下是实现删除的方法:
//数字从大到小排序
bool Comp(const int &a, const int &b)
{
return a > b;
}
//删除多行
void OnDelete(QTableWidget* pTable)
{
if (!pTable)
{
return;
}
std::vector<int> vecItemIndex;//保存选中行的行号
QList<QTableWidgetItem*> selections = pTable->selectedItems();
for (int i = 0; i < selections.size(); i++)
{
vecItemIndex.push_back(selections.at(i)->row());//存储选中的行
}
std::sort(vecItemIndex.begin(), vecItemIndex.end(), Comp);//将行号从大到小排序
vecItemIndex.erase(std::unique(vecItemIndex.begin(), vecItemIndex.end()), vecItemIndex.end());//去除重复的行号
for (int k = 0; k < vecItemIndex.size(); k++)
{
pTable->removeRow(vecItemIndex[k]);//删除行
}
}