Как организовать сортировку QSortFilterProxyModel? - PullRequest
3 голосов
/ 30 сентября 2010

Основной вид моего приложения содержит одноуровневый (без дочерних элементов) 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 Ответ

4 голосов
/ 01 октября 2010

Не сортируйте элементы в представлении. Добавьте их во временный список и отсортируйте этот список, используя QtConcurrent::run. Когда закончите (используйте QFutureWatcher, чтобы узнать, когда), настройте свою модель. Во время сортировки вы можете отобразить сообщение «Пожалуйста, подождите» или пульсатор.

...