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

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

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

setSelectionMode(QAbstractItemView::ExtendedSelection);

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

setSelectionBehavior(QAbstractItemView::SelectRows); 

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

QTableWidget多选selectedItems和selectedRanges的使用和区别_第1张图片

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

    QList selectItems = this->ui->tableWidget->selectedItems();
    qDebug() << "selectedItems("<row() <<", "<< item->column();
    }

    QList selectRanges = this->ui->tableWidget->selectedRanges();
    qDebug() << "selectedRanges("<

  上图的输出结果:

QTableWidget多选selectedItems和selectedRanges的使用和区别_第2张图片

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

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

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

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

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

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

你可能感兴趣的:(Qt,C/C++)