Qt学习笔记——视图中选择选中项的操作

使用到的头文件:

QItemSelectionModel

QItemSelection

QModelIndex

QModelIndexList

 

例子使用 QTableWidget 

3个视图ListView,TableView,TreeView都自带选择模型——selectionModel() 通过该函数获取

tableWidget = new QTableWidget(8, 4);
//创建一个8行4列的TableWidget

QItemSelectionModel * selectionModel = tableWidget->selectionModel();
//实例化一个SelectModel(选择模型),获取当前tableWidget自带的选择模型

 

在代码中设置选区

需要使用QItemSelection选区对象

    QModelIndex leftTop = tableWidget->model()->index(0, 0);

    QModelIndex rightBottom = tableWidget->model()->index(5, 2);
    //取得两个想要形成选区的index

    QItemSelection selection(leftTop, rightBottom);
    //将两个index赋值给选区对象,再将选区对象赋值给选择模型
    //可以将选择对象理解为创建选区对象

    selectionModel->select(selection, QItemSelectionModel::Select);

关于 QItemSelectionModel::Select 设置选择模式:选区中的所有索引指向的item都会被选中

更多的选择模式可参考帮助文档 QItemSelectionModel::SelectionFlags

QItemSelectionModel::Deselect 取消选中

QItemSelectionModel::Toggle 取反的操作: 选中的 ---> 未选中         未选中 ---> 选中

获取选区

需要使用QModelIndexList来接收数据

QModelIndexList indexList = selectionModel->selectedIndexes();
//获取当前选择模型中的选区索引

QString str = "";


for(QModelIndex index : indexList){
    str += index.data().toString() + "\n";
}

QMessageBox::information(this, "selectionData", str);

 

关于选择模型QSelectionModel中的信号

selectionChanged(QItemSelection,QItemSelection)

currentChanged(QModelIndex,QModelIndex)

此处需分清楚,选区(选中区域) 与 当前选中项的区别

选区,是鼠标选择,或代码操作选择后,View中有蓝色颜色的区域,一般这种情况下,最后一个被选中的为当前选中项currentSelection

扫描二维码关注公众号,回复: 11565415 查看本文章

当前选中项,不管有没有你有没有对View进行选择,都会存在一个当前选中项,如果没有进行选择,那么默认当前选中项为model中的第一个item

选区可以没有,但是当前选中项是一定存在的

回到两个信号

第一个信号selectionChanged(QItemSelection,QItemSelection)

选区更改信号

该信号有两个参数,第一个为当前选区,第二个为上一次的选区

第二个信号currentChanged(QModelIndex,QModelIndex)

选中项更改信号

该信号也有两个参数,第一个为当前选中项,第二个为上一次的选中项

猜你喜欢

转载自blog.csdn.net/qq_15710245/article/details/82814836