QTreeView使用总结16,定时刷新后,当前选中行的处理

1,简介

在使用QTreeView展示数据的时候,有些数据是在动态变化的,
这时候也需要动态刷新界面,一般直接更新model即可。
但是存在一个问题:之前的选中状态会丢失。
本文讨论在更新数据时如何处理选中状态。

2,两种情况

情况一:更新数据后,需选中同样内容的行。
比如:之前有3行,每行内容为a/b/c,选中了第1行a。现在更新后有5行,x/y/a/b/c,更新后要求仍然选中a,即第3行。
适用情况:软件其他地方与QTreeView里的选中内容有对应关系。所以这个选中行的具体内容不能变,不然无法对应。
解决办法:记录选中行的可唯一识别的data,在刷新后逐行判断,在记录内的就选中。

情况二:更新数据后,需选中同样位置的行。
比如:之前有3行,每行内容为a/b/c,选中了第1行a。现在更新后有5行,x/y/a/b/c,更新后要求仍然选中第1行,即x。
解决办法:记录选中行的index,刷新后设置该index即可,如果刷新后的数据不存在该index那么设置会失败,不用管。

3,代码

对于情况二,存储每行index,然后设置index。
示例代码:

		//获取更新之前的所有选中行索引
		QModelIndexList selected = ui->treeView->selectionModel()->selectedIndexes();

		//清除所有行
        mModel->removeRows(0,mModel->rowCount());
        //更新数据
        InitTreeModel();

		//重设索引为之前的位置
        if(!selected.isEmpty())
        {
            foreach(const QModelIndex& index, selected)
            {
                ui->treeView->selectionModel()->select(index,QItemSelectionModel::Select | QItemSelectionModel::Rows);
            }
        }

对于情况一,存储每行一个具体的key值。然后在更新数据后遍历每行比较key值,存在就加入新的选中索引。
代码类似,可自行实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值