У меня есть QTableView
с QAbstractTableModel
дочерним экземпляром, установленным в качестве модели. Ребенок реализует void sort(int columnt, Qt::SortOrder order)
. Я установил QTableView::sortEnabled(bool)
на true
, чтобы я мог сортировать свою таблицу, щелкнув заголовок столбца. Когда я щелкаю по заголовку, сортировка заканчивается почти мгновенно, но таблица обновляется только тогда, когда я перемещаю мышь в область таблицы. Нужно ли мне излучать какой-то сигнал от sort()
? Или вызвать функцию для обновления QTableView
?
Сортировка QTableView обновляется медленно
comment
Немного сложно: испускать dataChanged(QModelIndex(), QModelIndex()); после сортировки
- person Dmitry Sazonov   schedule 17.09.2013
comment
@DmitrySazonov, кажется, работает! добавишь ответ?
- person Nazar554   schedule 17.09.2013
comment
Не возражаете ли вы опубликовать код для своей функции сортировки, я зашел так далеко, но не знаю, что добавить в переопределенную функцию сортировки, и, похоже, не могу найти никакой информации об этом...
- person AngryDuck   schedule 07.10.2013
comment
@AngryDuck просто использует qSort в контейнере данных с оператором lessthan. реализовать оператор lessthen в зависимости от того, по каким критериям вы сортируете. если у вас возникли проблемы, задайте новый вопрос.
- person Nazar554   schedule 08.10.2013
Ответы (1)
Немного сложно: испускать dataChanged(QModelIndex(), QModelIndex()); после сортировки.
Хочу отметить, что передача недопустимых индексов не документирована, но я часто использую это в своих проектах. Это работает хорошо и намного быстрее, чем передача действительных индексов с большими диапазонами, потому что обновляется только видимая область. Но у него могут быть некоторые глюки с тяжелыми делегатами / пользовательскими виджетами.
Я тестировал на QTreeView - обновление диапазона 10 тыс. элементов занимает около 1,5 секунды (выдача dataChanged с действительными индексами). И когда я использую недопустимые индексы, сигнал обрабатывается немедленно.
person
Dmitry Sazonov
schedule
17.09.2013
Я нашел в документе Qt, что вы должны использовать
emit layoutChanged()
. Я не знаю, как быстрее.
- person Nazar554; 08.10.2013
layoutChanged будет отправлен во все виды, которые подключены к модели. Это полезно, когда размер элементов должен быть пересчитан. Вы можете проверить это: stackoverflow. ком/вопросы/16444558/
- person Dmitry Sazonov; 08.10.2013