我写了一个基于QAbstractItemModel
的类并实现了data(const QModelIndex & ar_index, int a_role) const
函数。我使用以下方法刷新模型:
beginInsertRows(QModelIndex(), 0, 0);
// fill model
endInsertRows();
内部数据功能我刷新后需要更新一些信息X
。
我检查了在刷新模型和调试后调用了data
函数我验证了我的X
变量已正确设置。
刷新后,我需要使用此X
值填充另一个小部件。我怎么知道所有数据刷新都已完成并且正确显示X
值?完全刷新模型后会发出哪个信号?
答案 0 :(得分:0)
这里没有标准信号可用 - Qt的MVC API不仅支持静态模型,还支持动态模型,对于这些,不可能有一个信号告诉“全部完成”。例如,在Trojita,一个Qt IMAP电子邮件客户端,rowsInserted
被发出以指示新电子邮件已经到达,但这甚至在图书馆知道有关新到货的任何事情之前发生 - 甚至不是的UID。只有在远程服务器使用数据响应库的命令后,才会发出dataChanged
以指示“模型所代表的数据”已更改,并且附加的视图将更新。
你说你从头开始重新实现自己的QAIM。这意味着您可以在此处设置您认为合适的任何合同。有些数据是不可变的,即保证在加载后永远不会改变吗?如果是这样,您可以使用自定义角色,例如RoleIsItemFetched
,并在每次更改模型后(即modelReset
之后,rowsInserted
,rowsMoved
和dataChanged
)检查您的data(someIndex, RoleIsItemFetched).toBool()
函数是否返回true。如果是这样,你有你的数据,如果没有,你必须等待。
另一种方法可能是引入自己的信号。不要害怕,MVC API非常适合向用户呈现数据,但如果您认为需要对返回的内容进行更多控制并完全控制模型和“视图”,请继续编写代码做你需要的事情。