我遇到的问题很可能是WAD,但我仍然需要解决。我原本以为这是我的自定义模型的一个问题,但它实际上也存在于Qt本机模型类中。
考虑这个小程序:https://drive.google.com/file/d/0B9MLVHQaeHKxeFBSYzVGVF9sQ0U/edit?usp=sharing
它只是新的Qt GUI应用程序,带有2 QTreeViews
和两组按钮,用于在每个视图上插入/删除行和列。基础模型在一个视图中为QStandardItemModel
,在另一个视图中为QIdentityProxyModel
。通过单击模型完成导航 - 索引存储然后由按钮使用。
尝试插入/删除行和列,您会注意到在基础数据结构发生更改后,视图不会立即更新。相反,它们会在您将鼠标悬停在它们之后进行更新。这就是问题,因为在我的其他项目中,我有传入的网络数据,用于更新通过标准Qt视图显示给用户的模型数据。因此,我需要在数据更改后更新视图,而不是当用户将鼠标悬停在他们身上时,他可能不会这样做,因为他可能不知道更改。
您可能会注意到我尝试强制更新视图的updateViews()
功能。 update()
和repaint()
都没有改变任何内容。前者可能正如文档中说的那样,但重绘应该按照我的理解导致小部件重新绘制...有没有其他方法强制更新视图?
另外,我设置代理模型的原因是在我的项目中代理被大量使用,因此我需要通过它们而不是通过外部插槽/函数调用来进行视图更新,就像在给出的例子。但如果需要,这也可以作为一种解决方法。
谢谢!
编辑:只有看似列操作才会出现问题。请参阅下面的评论中的详细信息。