标签:index 每行 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值,存在就加入新的选中索引。
代码类似,可自行实现。
标签:index,每行,QTreeView,16,更新,选中,刷新,数据 来源: https://blog.csdn.net/qq_45662588/article/details/120364251
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。