2013-07-11 2 views
0

У меня есть QTableWidget с первым столбцом, заполненным проверяемыми элементами, поэтому мне нужно было перегрузить эти элементы, чтобы их сортировать. Сортировка работает, как ожидается, когда я нажимаю на заголовок этого столбца (строки сортируются - сначала проверяются строки, а затем не проверяются).Неожиданное поведение, когда setSortingEnabled (1) называется

Проблема возникает, когда я запускаю мой GUI и не нажать на заголовок любого столбца, чтобы отсортировать таблицу, а затем сделать это:

tableWidget.setSortingEnabled(0); 
// check/uncheck some checkable items here 
tableWidget.setSortingEnabled(1); 

В этой ситуации переопределен __lt__ называется 100+ раз, но я не ожидайте этого, потому что я не нажимал на заголовок этого столбца для сортировки. Итак, почему называется __lt__? Почему он сравнивает некоторые проверяемые элементы, даже если я не нажал на заголовок этого столбца, чтобы отсортировать их?

Пожалуйста, помогите мне, вызывая __lt__, занимает слишком много времени, когда у меня есть 30+ строк.

ответ

5

От Docs (C++ Qt, но применяется):

sortingEnabled: BOOL

Это свойство сортировки включена ли.

Если это свойство верно, сортировка разрешена для таблицы. Если это свойство является ложным, сортировка не включена. Значение по умолчанию неверно.

Примечание :. Установка свойства true с помощью setSortingEnabled() немедленно вызывает вызов sortByColumn() с текущим сортированием раздел и заказ.

И если вы проверяете документы о QHeaderView (который запрошен виджетом знать столбец для сортировки) вы можете прочитать:

INT QHeaderView :: sortIndicatorSection() Const

Возвращает логический индекс раздела с индикатором сортировки. По по умолчанию это раздел 0.

См. Также setSortIndicator(), sortIndicatorOrder() и setSortIndicatorShown().

И:

Qt :: SortOrder QHeaderView :: sortIndicatorOrder() Const

Возвращает порядок сортировки индикатора. Если ни одна из секций не имеет индикатора , то возвращаемое значение этой функции равно undefined.

Таким образом, вы должны быть осторожны с этим

+0

Спасибо за ваш ответ. Прежде всего, я уже пробовал 'sortIndicatorSection()' до и после 'setSortingEnable (1)', оба результата были «7».У меня 7 столбцов (0-6), поэтому я догадался, что отсортированный по умолчанию раздел не равен 0, а столбец вне таблицы (раздел 7 в моем случае), хотя сортировка ведет себя так, как будто это 0. Возможно, это потому, что у меня есть tableWidget, а не tableView ? – Aleksandar

+1

В любом случае, ваш ответ указал мне в правильном направлении, и я нашел следующее: 'void QHeaderView :: setSortIndicator (int logicalIndex, Qt :: SortOrder order)' - _ "logicalIndex может быть -1, и в этом случае индикатор сортировки не будет и модель вернется к своему естественному, несортированному порядку. "_. Это работает и для tableWidget, помещая эту строку перед заполнением tableWidget, решив мою проблему. – Aleksandar

+0

QTableWidget наследуется от QTableView. Но обрабатывает модель внутри. Странно, что 7 вернулись. рад помочь anyways :) – Trompa

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