QTableWidget多行删除,选中任意几行数据可以不按顺序来,例如删除1,8,3,2行这样

思路:

  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 vecItemIndex;//保存选中行的行号
    QList 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]);//删除行
    }

}

你可能感兴趣的:(QT相关)