【问题标题】:How to thread the sorting of a QSortFilterProxyModel?如何线程化 QSortFilterProxyModel 的排序?
【发布时间】:2011-04-19 12:17:16
【问题描述】:

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

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

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

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

    return leftString < rightString;

提前致谢。

【问题讨论】:

  • 你是如何在启动时开始排序的?
  • m_packageView->sortByColumn(0, Qt::AscendingOrder);

标签: c++ qt qsort


【解决方案1】:

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

【讨论】:

  • 谢谢!正是我需要的。
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 2014-09-19
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多