qt - QModel中父母/孩子的QTreeView值改变了
问题描述
我有一个分层数据结构,我将其包装在 QModel(继承自 QAbstractItemModel)中,并在 QTreeView 中显示和编辑它。
假设 QTreeView 显示以下数据:
Item1
|----Item2
|----Item3
|-----Item4
|----Item5
现在将发生以下情况:
1) 我编辑 Item3 并将其值更改为 Item3_a。
2) QModel 识别变化并将包装模型中父母和孩子的项目值更改为:
Item1_a
|----Item2_a
|----Item3_a
|-----Item4_a
|----Item5_a
3) QTreeView 由模型通知有关其他更改(Item1、2、4 和 5)。仅更改显示的值。层次结构保持不变。
我的问题针对第 3 步:
如何正确通知 QTreeView 更改的数据?
这是我尝试过的:
我知道有modelReset
,但是 QTreeView 被折叠了。但是,它应该保持其折叠/展开状态。
根据文档,使用setData
具有不同父索引的模型方法会给出未定义的行为。我尝试从 setData 为每个父/子递归调用 setData,但这会导致程序崩溃。
我正在使用qt5。
解决方案
很确定您正在寻找的是“rowsInserted”以及与之相关的方法。“dataChanged”信号指示给定单元格(或范围)已更改值;这与更改表结构无关。
您在这里所做的是在将条目从一个父级移动到另一个父级时删除和插入行。您需要实现与此相关的所有方法。还有一个“rowsMoved”可能更适合您的需求。
推荐阅读
- php - WPGlobus 不适用于菜单中的阿拉伯语
- php - 在 wordpress 中激活插件时未创建表
- xamarin.forms - ReactiveTabbedPage 设置子视图导航到
- php - 如何在流明中绑定方法接口
- python - Python Pandas - 将 csv 文件转换为特定格式
- php - 如何在php的数据百分比进度条中设置ajax数据值?
- java - 无法解决 Room 依赖关系
- android - 缺少资源 ID 的图像:res://sample
- arrays - 在 Bash 中,如何遍历值向量?
- python - 从外部 .py 拖放到 jupyter notebook