以下使用 QSqlTableModel 模型,使用tableView显示内容
以下为界面:
这里主要介绍删除操作:
删除一行为:
int row=ui->tableView->currentIndex().row();//获取行号
model->revertRow(row);//删除该行
model->submitAll();//提交
删除多行的操作:
- 将tableView设置为可以多选
- 获取视图中的选择的索引
1.将tableView设置为可以多选(使用ctrl 和shift操作)
tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
//设置可以进行多选(系统默认为单选)
效果为:
2.获取已选择的索引
视图中的选择已经在之前的一篇文章中已经详细解释过了在这里就不进行解释了
处理模型视图中的选择_旷工锁的博客-CSDN博客
步骤为:
- 创建一个项目的选择模型(QItemSelectionModel)
- 用模型索引列表来接收选择模型中的选择索引(QModelIndexList)
- 遍历模型索引列表
QItemSelectionModel *selectionModel=ui->tableView->selectionModel();//获取选择模型
const QModelIndexList modelList=selectionModel->selectedIndexes();//获取选择的索引
for(const QModelIndex &index:modelList)
{
qDebug()<<index.row();//输出行号
}
选中全部:
选取少量几个:
如果先选择下面的数据再选择上面的数据:
以上可以总结出以下结论:
- 输出的数据以选择的前后来进行输出
- 当选择某行的多个项时会多次输出
- 所以为了防止多次删除同一行,需要进行去重
去重的常用方法:
1.使用QVector容器,然后排序,然后去重。
QItemSelectionModel *selectionModel=ui->tableView->selectionModel();//获取选择模型
const QModelIndexList modelList=selectionModel->selectedIndexes();//获取选择的索引
QVector<int> vector;
for(const QModelIndex &index:modelList)
{
vector.push_back(index.row());//添加内容
}
std::sort(vector.begin(),vector.end());//排序
QVector<int>::iterator end=std::unique(vector.begin(),vector.end());//去重
vector.erase(end,vector.end());//删除多余部分
for(int a:vector)
{
qDebug()<<a;
}
2.使用QMap容器(该容器会自动去重和排序)
QItemSelectionModel *selectionModel=ui->tableView->selectionModel();//获取选择模型
const QModelIndexList modelList=selectionModel->selectedIndexes();//获取选择的索引
QMap<int,int> mp;
for(const QModelIndex &index:modelList)
{
mp.insert(index.row(),1);//插入数据
}
QMap<int,int>::iterator it=mp.begin();
for(;it!=mp.end();it++)
{
qDebug()<<it.key();
}
获取行号之后就进行删除
for(int i=0;i<mp.size();i++)
{
model->removeRow(i);
}
model->submitAll();//提交