如何对QSortFilterProxyModel的排序进行线程化?

时间:2010-09-30 18:12:53

标签: c++ qt qsort

我的应用程序的主视图包含一个级别(无子级)QTreeView,平均显示30,000个项目。由于项目的创建方式,它们将被插入到未排序的模型中。这意味着在应用程序启动时,我必须按字母顺序对视图中的项目进行排序,这需要将近1秒钟,在完成之前会留下无响应的灰色屏幕。 (因为窗口还没有画过)

有什么方法可以将QSortFilerProxyModel排序到一个单独的线程中,还是有其他方法可以解决这个问题?

这是我的lessThan()代码,供参考:(左和右是传递给函数的两个QModelIndexes)

    QString leftString = left.data(PackageModel::NameRole).toString();
    QString rightString = right.data(PackageModel::NameRole).toString();

    return leftString < rightString;

提前致谢。

1 个答案:

答案 0 :(得分:4)

不要对视图中的项目进行排序。将它们添加到临时列表并使用QtConcurrent::run对该列表进行排序。完成后(使用QFutureWatcher知道何时),设置模型。正在执行排序时,您可以显示“请稍候”消息或悸动。