0

我想使用 Qt 为 Windows 制作一个查找实用程序。我在 C# 和 .NET 中创建了相同的应用程序,我想进行比较。我的应用程序将不得不QDir::entryList递归地使用来查找指定路径的内容并将它们添加到QListWidget. 因为 entryList 可能很慢,所以它必须在QThread. 此外,用户不应该等待很长时间才能看到一些结果,而是QListWidget应该填充一些结果。

我做了以下事情:

  1. 我创建了一个进行搜索的类,该类sendItem(QString)在找到文件时会发出一条消息。
  2. 此类在另一个线程中运行, f.moveThread(&thread)其中 wheref是 find 类的对象。
  3. 因为 QListWidget 没有插槽,所以我创建了另一个wrapper具有插槽addItem(QString)的类,该类的对象在 GUI 线程中执行,因此当接收到消息时sendItem,插槽addItem执行以下操作l.addItem(s),其中s是通过sendItem信号传输的数据。

这是从另一个线程更新 QListWidget 的最佳方式吗?因为它非常复杂,(而且它不起作用)但我不知道更好的。在 C# 中,我刚刚创建了一个delegate FillList我在委托对象中放入了一个方法fillList。我只是在我调用的方法中使用 wpf 列表框的方法作为参数给出了一个BeginInvokeand 。您可以在sourceforge.net中查看 C# 应用程序fillListthis.Dispatcher.invokeaddItem

和其他问题:是否最好将QListView用于这种应用程序?感谢你的回答。

4

1 回答 1

2
  1. 这是从另一个线程更新 GUI 的 Qt 方式。既然你的不行,我觉得你可以贴一些代码,我们来分析一下。

  2. 如果你的list不太大,QListWidget也可以,但是如果你的list很大,那么最好使用QListView,因为对于QListWidget来说,list中渲染的每一项本身就是一个widget,会占用大量内存。但在 QListView 中,它是负责绘制所有项目的视图的委托。

于 2012-12-13T13:33:58.470 回答