如何知道所有QAbstractItemModel :: data()函数何时完成

时间:2013-04-09 14:26:13

标签: c++ qt

我写了一个基于QAbstractItemModel的类并实现了data(const QModelIndex & ar_index, int a_role) const函数。我使用以下方法刷新模型:

beginInsertRows(QModelIndex(), 0, 0);
// fill model
endInsertRows();

内部数据功能我刷新后需要更新一些信息X

我检查了在刷新模型和调试后调用了data函数我验证了我的X变量已正确设置。

刷新后,我需要使用此X值填充另一个小部件。我怎么知道所有数据刷新都已完成并且正确显示X值?完全刷新模型后会发出哪个信号?

1 个答案:

答案 0 :(得分:0)

这里没有标准信号可用 - Qt的MVC API不仅支持静态模型,还支持动态模型,对于这些,不可能有一个信号告诉“全部完成”。例如,在Trojita,一个Qt IMAP电子邮件客户端,rowsInserted被发出以指示新电子邮件已经到达,但这甚至在图书馆知道有关新到货的任何事情之前发生 - 甚至不是的UID。只有在远程服务器使用数据响应库的命令后,才会发出dataChanged以指示“模型所代表的数据”已更改,并且附加的视图将更新。

你说你从头开始重新实现自己的QAIM。这意味着您可以在此处设置您认为合适的任何合同。有些数据是不可变的,即保证在加载后永远不会改变吗?如果是这样,您可以使用自定义角色,例如RoleIsItemFetched,并在每次更改模型后(即modelReset之后,rowsInsertedrowsMoveddataChanged )检查您的data(someIndex, RoleIsItemFetched).toBool()函数是否返回true。如果是这样,你有你的数据,如果没有,你必须等待。

另一种方法可能是引入自己的信号。不要害怕,MVC API非常适合向用户呈现数据,但如果您认为需要对返回的内容进行更多控制并完全控制模型和“视图”,请继续编写代码做需要的事情。