Как организовать сортировку QSortFilterProxyModel?

Основной вид моего приложения содержит одноуровневый (без дочерних элементов) QTreeView, который отображает в среднем 30000 элементов. Из-за способа создания элементов они вставляются в модель без сортировки. Это означает, что при запуске приложения я должен отсортировать элементы в представлении в алфавитном порядке, что занимает почти 1 секунду, оставляя серый экран без ответа, пока это не будет сделано. (Так как окно еще не нарисовано)

Есть ли способ, которым я мог бы получить сортировку QSortFilerProxyModel в отдельном потоке, или есть ли другие альтернативные способы решения этой проблемы?

Вот мой код lessThan() для справки: (слева и справа - два QModelIndexes, переданные функции)

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

    return leftString < rightString;

Заранее спасибо.

1 ответ

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

Другие вопросы по тегам