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

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

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

 

回到两个信号

第一个信号selectionChanged(QItemSelection,QItemSelection)

选区更改信号

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

第二个信号currentChanged(QModelIndex,QModelIndex)

选中项更改信号

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值