QAbstractItemModel Lazy加载锁定应用程序

时间:2012-07-09 15:52:17

标签: multithreading qt user-interface qtreeview qabstractitemmodel

我已经实现了canFetchMore,hasChildren和fetchMore,以便允许我的模型延迟加载。它非常简单,基于QT:http://doc.qt.io/archives/qt-4.7/itemviews-simpletreemodel.html

我的问题是,在我的应用程序中,提取子项并不是一个非常快速的操作,它会在服务器端出现几秒钟的延迟,同时它会确定孩子们实际上是谁。

我不确定如何处理。每次有人扩展节点时,我的应用程序都无法锁定几秒钟。我不知道如何在后台实现这一目标。如果我要创建一个子进程或线程来实际执行检索子进程和更新客户端数据结构的工作,我将如何告诉模型已成功完成(以及最终扩展的节点)

另外,有没有办法显示节点当前正在后台加载数据?

道歉,如果这些是愚蠢的问题,GUI编程对我来说仍然是一个谜,我以前从未使用过QT。

为了记录,我正在使用Python,但如果用C ++给出答案,我就能理解它们。

由于

1 个答案:

答案 0 :(得分:1)

  

如果我是   创建一个子流程或线程来实际执行检索工作   孩子们和更新客户端数据结构,我将如何   告诉模型这已成功完成(和   为节点最终扩展)。

您可以使用信号和插槽。在线程中,您将检索数据,您将发出自定义信号,如someDataAvailable(YourdataType),然后在gui中,您将使用类似handleDataReadySignal(YourdataType)的插槽处理此信号。发出信号时,信号会传递给你的物体。显然你需要更新handleDataReadySignal插槽中的gui和列表。当然,您需要connect信号槽,最好是在列表所附的窗口/对话框的构造函数中