2010-09-30 6 views
2

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

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

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

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

    return leftString < rightString; 

Спасибо заранее.

+0

Как вы инициируете сортировку при запуске? –

+0

m_packageView-> sortByColumn (0, Qt :: AscendingOrder); –

ответ

3

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

+0

Спасибо! Именно то, что мне нужно. –

Смежные вопросы