0

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

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

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

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

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

4

1 回答 1

0

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

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

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

于 2013-04-09T14:49:18.003 回答