C++ 如何对QSortFilterProxyModel进行线程排序?

C++ 如何对QSortFilterProxyModel进行线程排序?,c++,qt,qsort,C++,Qt,Qsort,我的应用程序的主视图包含一个单级(无子级)QTreeView,平均显示30000个项目。由于创建项的方式不同,它们将不排序地插入到模型中。这意味着,在应用程序启动时,我必须按字母顺序对视图中的项目进行排序,这需要将近1秒的时间,在完成之前留下一个没有响应的灰色屏幕。(因为窗户还没漆过) 有没有办法将QSortFilerProxyModel排序到一个单独的线程中,或者有没有其他方法来解决这个问题 以下是我的lessThan()代码,供参考:(左侧和右侧是传递给函数的两个QModelIndexes)

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

有没有办法将QSortFilerProxyModel排序到一个单独的线程中,或者有没有其他方法来解决这个问题

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

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

提前感谢。

不要对视图中的项目进行排序。将它们添加到临时列表中,并使用对该列表进行排序。完成后(使用a来了解时间),设置您的模型。在执行排序时,您可以显示“请稍候”消息或提示。

启动时如何启动排序?m_packageView->sortByColumn(0,Qt::AscendingOrder);谢谢正是我需要的。
    QString leftString = left.data(PackageModel::NameRole).toString();
    QString rightString = right.data(PackageModel::NameRole).toString();

    return leftString < rightString;