我已经实现了canFetchMore、hasChildren和fetchMore,以便允许我的模型延迟加载。它非常简单,基于QT:http://doc.qt.io/archives/qt-4.7/itemviews-simpletreemodel.html
我的问题是,在我的应用程序中,获取子对象并不是一个很快的操作,它在服务器端需要几秒钟的延迟,才能确定子对象的实际身份。
我不知道该怎么处理。我不能每次有人扩展节点时都让我的应用程序锁定几秒钟。我不知道如何在幕后实现这一点。如果我要创建一个子进程或线程来实际完成检索子进程和更新客户端数据结构的工作,我将如何告诉模型这已经成功完成(并让节点最终展开)。
此外,是否有方法显示节点当前正在后台加载数据?
抱歉,如果这些都是愚蠢的问题,GUI编程对我来说仍然有点神秘,而且我以前从未使用过QT。
记录在案,我使用的是Python,但如果用C++给出答案,我就能理解它们。
感谢
如果我愿意创建一个子进程或线程来实际执行检索工作孩子和更新客户端数据结构,我该如何继续告诉模型这已经成功完成(以及以便节点最终展开)。
您可以使用信号和插槽。在检索数据的线程中,您将发出类似someDataAvailable(YourdataType)
的自定义信号,然后在gui中,您可以使用类似handleDataReadySignal(YourdataType)
的插槽来处理此信号。发射时,信号会传递给它的对象。显然,您需要更新gui和handleDataReadySignal
插槽中的列表。当然,您需要connect
插槽到信号,最好是在列表所附的窗口/对话框的构造函数中。