在layoutChanged()

时间:2015-05-25 18:49:02

标签: c++ qt qlistview qabstractitemmodel

有以下问题:

我有真实的模型(Qt独立),它能够报告(通过观察者模式)它被改变,改变可以绝对任何东西(加载新文件)

合同是(单线程):

  • 客户端从真实模型中获取可写元素
  • 实际模型报告已修改为观察者,获得了可写项目
  • 客户端执行所需的所有更改,并在返回时,模型需要处于一致状态
  • 任何内容都可以免费更新,因为在执行时已经完成了更改

QModel是这个真实模型的包装器,并且是修改过的发布layoutChanged

on qSignal lst ... :: selectionModel():: selectionChanged()我连接了notify(),就像QModel的插槽一样,表现得好像真正的模型改变了(实际上他们正在丢弃旧状态并计算新的状态),所以他们发出layoutChanged - 这部分似乎工作正常

现在我有以下问题,当模型更改时,所有QModel都会发出layoutChanged,当完成所有操作后,主循环获得控制并尝试重新绘制相关的QListViews

问题是,有些人依赖别人, 例如:

  • 真实模特有房屋/公寓/椅子
  • QModel包装QHouses / QFlats / QChairs
  • QListViews是lstHouses / lstFlats / lstChairs

它应该如何运作

  • QHouses只列出所有房屋 - 顶级
  • QFlats根据lstHouses中的选择显示真实模型的单位
    • QHouses-> GetHouseReference(lstHouses-> CURRENTINDEX()) - > GetFlats()
  • QChairs根据lstFlats中的选择显示真实模型的椅子
    • QFlats-> GetFlatReference(lstFlats-> CURRENTINDEX()) - > GetChairs()

问题是,当例如最后一个房子被选中,并且真实模型决定放弃它时,所有QModel报告layoutChanged和主循环(我认为)尝试绘制所有QListViews,

但是我不知道热修复/强制命令,或者在从currentIndex()返回之前确保listView基于模型更新

会发生什么,lstHouses返回指向最后一行(不再存在)和index()的索引.isValid()返回true - >因此,当尝试从不存在的索引

中检索真实模型中的值时,它会崩溃

有关这些场景如何解决的任何想法?

在请求QListView :: currentIndex

之前,请先调用一些DoSyncNow()

0 个答案:

没有答案