创业团队软件技术负责人

C++/Qt资深开发者,项目驱动、实战主义技术研究者

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

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值,存在就加入新的选中索引。
代码类似,可自行实现。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dpsying/article/details/80696489
个人分类: QTreeView使用总结
所属专栏: QTreeView使用总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭