QTableView实现同时删除被选中的多行记录
来源:互联网 发布:烘焙食谱软件 编辑:程序博客网 时间:2024/06/05 13:30
一个很简单的功能,就是在QTableView中,有一些不连续的选区,实现将被选中的行删除。
.
首先是获得选区,可以用 QItemSelectionModel 和 QModelIndexList 实现:
- QItemSelectionModel *selections = ui.tableView->selectionModel();
- QModelIndexList selected = selections->selectedIndexes();
- foreach (QModelIndex index, selected)
- {
- ...
- }
.
需要一些技巧的是因为每行选中的格子数可能是任意的,怎样保证被删除的行正确,并且只被删除一次。
.
比较笨的办法可以是把所有被选中格子的行号记录到QList<int>,自己实现一个筛选函数。
或者用现成的QStringList方法 removeDuplicates() 和
sort (),再 ToInt() 成行号使用。
不过有一种更加有效的方案,使用QMap<int,int>:
.
- foreach (QModelIndex index, selected)
- {
- QMap<int, int> rowMap;
- rowMap.insert(index.row(), 0);
- }
- int rowToDel;
- QMapIterator<int, int> rowMapIterator(rowMap);
- rowMapIterator.toBack();
- while (rowMapIterator.hasPrevious())
- {
- rowMapIterator.previous();
- rowToDel = rowMapIterator.key();
- tableModel->removeRow(rowToDel);
- }
巧妙的使用了QMap添加同名项不会增加实际项目条数的特点,并且QMap中的记录本身是有序的 :-)
.
另一种方法是将表声明成只能整行选择的:
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
然后用 if(index.column==0) 只将第一列被选中的格子作为删除条件。也可以实现每行只删除一次的效果。
.
参考:http://www.qtcentre.org/threads/739-Get-list-of-selected-rows-from-QTableView
0 0
- QTableView实现同时删除被选中的多行记录
- QTableView实现同时删除被选中的多行记录
- VS2010+QT5编程之QTableView同时删除选中的多行
- asp实现批量删除选中的多条记录
- asp实现批量删除选中的多条记录
- GridView控件与CheckBox结合,实现全选功能,同时实现删除选中的多行数据
- GridView控件与CheckBox结合,实现全选功能,同时实现删除选中的多行数据 .
- Qt qtableview 多行选中,获取行号
- QTableView 得到选中行
- grid删除选中的记录
- gridview选中效果的实现,选中的改变背景。同时只有一个能被选中
- js实现对选中的多条记录进行删除操作
- js实现对选中的多条记录进行删除操作
- cxgrid删除选中行记录
- Part 66 - Check及Uncheck所有CheckBox 同时删除多行数据记录的实现
- QT QTableView 获取单击选中行的内容
- QT QTableView 获取单击选中行的内容
- 机房收费系统遇到的问题(一) datagridview一次性移除多行选中数据,同时删除数据库数据
- android 多线程Thread,Runnable,AsyncTask
- inverse+cascade
- CSS布局模型
- Spring之IOC篇章详解
- contentprovide 获取联系人信息,删除联系人信息
- QTableView实现同时删除被选中的多行记录
- DES原理
- iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发
- Linux的Local设置
- Extjs3.3. 中用 Echarts
- Spring handler method
- Xcode-Analyze使用
- jQuery siblings() 方法
- [leetcode] 80.Remove Duplicates from Sorted Array II