QTableWidget多选selectedItems和selectedRanges的使用和区别

2 篇文章 0 订阅

  QTableWidget是QT程序中,常用的显示数据表格控件,其用法也不再赘述,这里就说一说多选接口的使用方法,区别和问题。

  首先,表格支持多选(Ctrl、Shift、  Ctrl+A都可以),需要对表格进行属性设置:

setSelectionMode(QAbstractItemView::ExtendedSelection);

  另外,还可以对选中模式进行设置,比如选中时,默认选中一行数据:

setSelectionBehavior(QAbstractItemView::SelectRows); 

  建立一张表,按照如下图所示的步骤,多选效果如下:

  对于已经多选的单元格,如何进行获取,接口提供了两个:selectedItems和selectedRanges。代码如下:

    QList<QTableWidgetItem*> selectItems = this->ui->tableWidget->selectedItems();
    qDebug() << "selectedItems("<<selectItems.size()<<")----------";
    for(auto item:selectItems)
    {
        qDebug() << item->row() <<", "<< item->column();
    }

    QList<QTableWidgetSelectionRange> selectRanges = this->ui->tableWidget->selectedRanges();
    qDebug() << "selectedRanges("<<selectRanges.size()<<")----------";
    for(auto range:selectRanges)
    {
        qDebug() << range.rowCount() <<", "<< range.columnCount() << ": "
                 <<range.topRow()<<","<<range.bottomRow()<<", "<<range.leftColumn() <<","<<range.rightColumn();
    }

  上图的输出结果:

  基于事实,以及接口文档,对比说明如下:

接口selectedItemsselectedRanges
返回结果QList<QTableWidgetItem*>QList<QTableWidgetSelectionRange>
返回说明选中单元格的,元素的列表选中区域元素,边界的列表
list.size()97
区别
  • 支持左键、Ctrl+左键、Ctrl+A 和 Shift+左键 选中。即只要是选中的单元格,都会列出。
  • 输出的顺序,即为选中的顺序。对于Shift多选的顺序,按照从上到下、从左到右的顺序输出。
  • 只支持 左键 选中的,比如Shift+左键,返回的是这块区域。
  • 输出顺序,是选中区域的顺序。

  所以,结论1:获取选中的单元格,应首选selectedItems接口。

  所以,结论2:获取的list的顺序,是选中的顺序,不是index顺序。

  所以,结论3:如果只关心选中的所在行,或者所在列,需要自己过滤。特别是在设置了选中模式的条件下。

  所以,结论4:对选取的单元格进行操作,特别是删除,记得先排序,再从最大索引,往最小索引方向,进行操作。

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值